question: private static int [ ] mult512 ( int [ ] a , int [ ] b ) { int [ ] result = new int [ 32 ] ; int [ ] a0 = new int [ 8 ] ; System . arraycopy ( a , 0 , a0 , 0 , Math . min ( 8 , a . length ) ) ; int [ ] a1 = new int [ 8 ] ; if ( a . length > 8 ) { System . arraycopy ( a , 8 , a1 , 0 , Math . min ( 8 , a . length - 8 ) ) ; } int [ ] b0 = new int [ 8 ] ; System . arraycopy ( b , 0 , b0 , 0 , Math . min ( 8 , b . length ) ) ; int [ ] b1 = new int [ 8 ] ; if ( b . length > 8 ) { System . arraycopy ( b , 8 , b1 , 0 , Math . min ( 8 , b . length - 8 ) ) ; } int [ ] c = mult256 ( a1 , b1 ) ; result [ 31 ] ^= c [ 15 ] ; result [ 30 ] ^= c [ 14 ] ; result [ 29 ] ^= c [ 13 ] ; result [ 28 ] ^= c [ 12 ] ; result [ 27 ] ^= c [ 11 ] ; result [ 26 ] ^= c [ 10 ] ; result [ 25 ] ^= c [ 9 ] ; result [ 24 ] ^= c [ 8 ] ; result [ 23 ] ^= c [ 7 ] ^ c [ 15 ] ; result [ 22 ] ^= c [ 6 ] ^ c [ 14 ] ; result [ 21 ] ^= c [ 5 ] ^ c [ 13 ] ; result [ 20 ] ^= c [ 4 ] ^ c [ 12 ] ; result [ 19 ] ^= c [ 3 ] ^ c [ 11 ] ; result [ 18 ] ^= c [ 2 ] ^ c [ 10 ] ; result [ 17 ] ^= c [ 1 ] ^ c [ 9 ] ; result [ 16 ] ^= c [ 0 ] ^ c [ 8 ] ; result [ 15 ] ^= c [ 7 ] ; result [ 14 ] ^= c [ 6 ] ; result [ 13 ] ^= c [ 5 ] ; result [ 12 ] ^= c [ 4 ] ; result [ 11 ] ^= c [ 3 ] ; result [ 10 ] ^= c [ 2 ] ; result [ 9 ] ^= c [ 1 ] ; result [ 8 ] ^= c [ 0 ] ; a1 [ 0 ] ^= a0 [ 0 ] ; a1 [ 1 ] ^= a0 [ 1 ] ; a1 [ 2 ] ^= a0 [ 2 ] ; a1 [ 3 ] ^= a0 [ 3 ] ; a1 [ 4 ] ^= a0 [ 4 ] ; a1 [ 5 ] ^= a0 [ 5 ] ; a1 [ 6 ] ^= a0 [ 6 ] ; a1 [ 7 ] ^= a0 [ 7 ] ; b1 [ 0 ] ^= b0 [ 0 ] ; b1 [ 1 ] ^= b0 [ 1 ] ; b1 [ 2 ] ^= b0 [ 2 ] ; b1 [ 3 ] ^= b0 [ 3 ] ; b1 [ 4 ] ^= b0 [ 4 ] ; b1 [ 5 ] ^= b0 [ 5 ] ; b1 [ 6 ] ^= b0 [ 6 ] ; b1 [ 7 ] ^= b0 [ 7 ] ; int [ ] d = mult256 ( a1 , b1 ) ; result [ 23 ] ^= d [ 15 ] ; result [ 22 ] ^= d [ 14 ] ; result [ 21 ] ^= d [ 13 ] ; result [ 20 ] ^= d [ 12 ] ; result [ 19 ] ^= d [ 11 ] ; result [ 18 ] ^= d [ 10 ] ; result [ 17 ] ^= d [ 9 ] ; result [ 16 ] ^= d [ 8 ] ; result [ 15 ] ^= d [ 7 ] ; result [ 14 ] ^= d [ 6 ] ; result [ 13 ] ^= d [ 5 ] ; result [ 12 ] ^= d [ 4 ] ; result [ 11 ] ^= d [ 3 ] ; result [ 10 ] ^= d [ 2 ] ; result [ 9 ] ^= d [ 1 ] ; result [ 8 ] ^= d [ 0 ] ; int [ ] e = mult256 ( a0 , b0 ) ; result [ 23 ] ^= e [ 15 ] ; result [ 22 ] ^= e [ 14 ] ; result [ 21 ] ^= e [ 13 ] ; result [ 20 ] ^= e [ 12 ] ; result [ 19 ] ^= e [ 11 ] ; result [ 18 ] ^= e [ 10 ] ; result [ 17 ] ^= e [ 9 ] ; result [ 16 ] ^= e [ 8 ] ; result [ 15 ] ^= e [ 7 ] ^ e [ 15 ] ; result [ 14 ] ^= e [ 6 ] ^ e [ 14 ] ; result [ 13 ] ^= e [ 5 ] ^ e [ 13 ] ; result [ 12 ] ^= e [ 4 ] ^ e [ 12 ] ; result [ 11 ] ^= e [ 3 ] ^ e [ 11 ] ; result [ 10 ] ^= e [ 2 ] ^ e [ 10 ] ; result [ 9 ] ^= e [ 1 ] ^ e [ 9 ] ; result [ 8 ] ^= e [ 0 ] ^ e [ 8 ] ; result [ 7 ] ^= e [ 7 ] ; result [ 6 ] ^= e [ 6 ] ; result [ 5 ] ^= e [ 5 ] ; result [ 4 ] ^= e [ 4 ] ; result [ 3 ] ^= e [ 3 ] ; result [ 2 ] ^= e [ 2 ] ; result [ 1 ] ^= e [ 1 ] ; result [ 0 ] ^= e [ 0 ] ; return result ; }
target:  16-Integer Version of Karatzuba multiplication.