summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)Author
2018-12-11bc: shrink bc_program_printStringDenys Vlasenko
function old new delta zbc_program_print 665 642 -23 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11bc: convert zbc_program_op to "z" function, fix a thinko in prev commitsDenys Vlasenko
function old new delta zbc_program_assign 448 447 -1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11bc: convert bc_program_logical to "z" functionDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11bc: do not use "(cond ? f1 : f2)(params)" idiom, it messes up static ↵Denys Vlasenko
function optimizations With direct calls, GCC no longer thinks that we take addresses of the functions, and can use "more optimal" internal ABI for _all_ calls to these functions, not only at this callsite. On i486, regparm is used, and: function old new delta zbc_num_inv 56 57 +1 zbc_num_k 852 851 -1 zbc_program_modexp 558 556 -2 zbc_num_d 541 539 -2 bc_num_ulong2num 59 57 -2 zbc_program_num 840 836 -4 bc_num_zero 11 7 -4 bc_num_one 28 24 -4 bc_program_exec 3928 3918 -10 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/8 up/down: 1/-29) Total: -28 bytes text data bss dec hex filename 982237 485 7296 990018 f1b42 busybox_old 982209 485 7296 989990 f1b26 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11bc: convert arithmetic calc functions to "z" logicDenys Vlasenko
In order for magic macros to work, a bit of reordering was necessary. function old new delta zbc_program_modexp - 558 +558 zbc_program_assign - 448 +448 zbc_program_pushArray - 111 +111 zbc_num_s 239 237 -2 zbc_num_d 543 541 -2 zbc_num_binary 145 143 -2 zbc_num_a 443 441 -2 zbc_num_rem 95 91 -4 zbc_num_divmod 150 146 -4 zbc_num_m 269 257 -12 zbc_num_r 230 208 -22 zbc_num_printNum 447 417 -30 bc_program_exec 3960 3928 -32 zbc_num_p 434 399 -35 zbc_program_num 880 840 -40 zbc_num_k 913 852 -61 zbc_program_printStream 141 - -141 bc_program_assign 455 - -455 bc_program_modexp 668 - -668 ------------------------------------------------------------------------------ (add/remove: 3/3 grow/shrink: 0/13 up/down: 1117/-1512) Total: -395 bytes text data bss dec hex filename 982632 485 7296 990413 f1ccd busybox_old 982237 485 7296 990018 f1b42 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11bc: rename arithmetic calc functions to "z" functions, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11bc: move declarations around, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11bc: code shrink in zbc_lex_number()Denys Vlasenko
function old new delta zbc_lex_number 279 190 -89 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11bc: make bc_program_pushVar "z-function"Denys Vlasenko
function old new delta bc_program_pushVar 200 198 -2 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11bc: improve "noninteractive" macro machinery so that even "return zero" code ↵Denys Vlasenko
is not generated Most affected functions shrink by 2 bytes on x86. function old new delta zbc_program_num - 880 +880 zbc_program_print - 665 +665 zbc_num_printNum - 447 +447 zbc_program_call - 323 +323 zbc_program_copyToVar - 287 +287 zbc_lex_number - 279 +279 zbc_program_binOpPrep - 269 +269 zbc_program_assignStr - 142 +142 zbc_program_printStream - 141 +141 zbc_func_insert - 93 +93 zbc_num_ulong - 88 +88 zbc_program_prep - 79 +79 zbc_num_shift - 53 +53 bc_num_shift 54 - -54 bc_program_prep 81 - -81 bc_num_ulong 90 - -90 bc_func_insert 95 - -95 bc_program_printStream 143 - -143 bc_program_assignStr 144 - -144 bc_program_binOpPrep 271 - -271 bc_lex_number 281 - -281 bc_program_copyToVar 289 - -289 bc_program_call 325 - -325 bc_num_printNum 471 - -471 bc_program_print 667 - -667 bc_program_num 880 - -880 ------------------------------------------------------------------------------ (add/remove: 13/13 grow/shrink: 0/0 up/down: 3746/-3791) Total: -45 bytes text data bss dec hex filename 982779 485 7296 990560 f1d60 busybox_old 982734 485 7296 990515 f1d33 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: it's not clear bc_vm_file() always exits on errors, remove ERRORS_ARE_FATALDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: more ERRORS_ARE_FATAL annotationsDenys Vlasenko
function old new delta bc_program_exec 3920 3969 +49 bc_program_call 329 325 -4 bc_vm_run 622 616 -6 bc_program_modexp 677 668 -9 bc_program_assign 471 455 -16 bc_program_pushArray 113 - -113 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/4 up/down: 49/-148) Total: -99 bytes text data bss dec hex filename 982872 485 7296 990653 f1dbd busybox_old 982773 485 7296 990554 f1d5a busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: stop checking for name length in bc_lex_name()Denys Vlasenko
Gigabyte-long names are not a practical concern. function old new delta bc_lex_name 73 69 -4 bc_lex_token 1266 1259 -7 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-11) Total: -11 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: optimize non-interactive config: we know that many functions always succeedDenys Vlasenko
function old new delta bc_program_assign 475 471 -4 bc_program_prep 87 81 -6 bc_parse_parse 423 417 -6 bc_num_p 440 434 -6 bc_program_printStream 153 143 -10 bc_program_execStr 478 468 -10 bc_parse_auto 275 265 -10 bc_num_k 925 913 -12 bc_program_copyToVar 307 289 -18 bc_program_binOpPrep 289 271 -18 bc_num_printNum 489 471 -18 bc_num_m 287 269 -18 bc_program_pushArray 139 113 -26 bc_program_modexp 707 677 -30 bc_program_print 704 667 -37 bc_program_exec 4010 3920 -90 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/16 up/down: 0/-319) Total: -319 bytes text data bss dec hex filename 983202 485 7296 990983 f1f07 busybox_old 982883 485 7296 990664 f1dc8 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: in non-interactive config, let compiler know that error funcs do not returnDenys Vlasenko
function old new delta bc_num_s 235 239 +4 bc_lex_next 92 91 -1 dc_parse_register 53 51 -2 dc_parse_parse 46 44 -2 bc_vm_run 624 622 -2 bc_program_assignStr 146 144 -2 bc_parse_else 135 133 -2 bc_parse_body 116 114 -2 bc_num_a 445 443 -2 bc_func_insert 97 95 -2 bc_program_pushVar 203 200 -3 bc_parse_text 133 130 -3 bc_error_bad_character 17 14 -3 bc_error 14 11 -3 bc_program_printStream 157 153 -4 bc_program_prep 91 87 -4 bc_program_copyToVar 311 307 -4 bc_num_ulong 95 90 -5 bc_num_p 445 440 -5 bc_program_print 711 704 -7 bc_parse_endBody 365 358 -7 bc_num_r 237 230 -7 bc_num_d 550 543 -7 dc_lex_token 682 674 -8 bc_program_pushArray 147 139 -8 bc_program_assign 485 475 -10 bc_program_read 333 322 -11 bc_lex_token 1278 1266 -12 bc_parse_stmt 1780 1767 -13 bc_program_modexp 723 707 -16 dc_parse_expr 762 744 -18 bc_program_execStr 496 478 -18 bc_program_call 347 329 -18 bc_vm_file 219 197 -22 bc_program_binOpPrep 311 289 -22 bc_parse_name 539 513 -26 bc_parse_parse 451 423 -28 bc_program_num 912 880 -32 bc_read_line 172 139 -33 bc_program_exec 4048 4010 -38 bc_parse_auto 313 275 -38 bc_parse_expr_empty_ok 2095 2036 -59 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/41 up/down: 4/-509) Total: -505 bytes text data bss dec hex filename 983707 485 7296 991488 f2100 busybox_old 983202 485 7296 990983 f1f07 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10tls: prepare for ECDH_anon ciphersDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10tls: fix a potential (currently "disabled" by a macro) SHA1-related bugDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10tls: if !ENABLE_FEATURE_TLS_SHA1, tls->MAC_size is always SHA256_OUTSIZE for ↵Denys Vlasenko
AES-CBC function old new delta tls_xread_record 634 636 +2 xwrite_encrypted 579 580 +1 tls_handshake 2095 2085 -10 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 3/-10) Total: -7 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10tls: introduce FEATURE_TLS_SHA1 to make SHA1 code optionalDenys Vlasenko
When disabled: function old new delta xwrite_encrypted 580 579 -1 prf_hmac_sha256 222 217 -5 hmac_begin 158 149 -9 static.ciphers 32 20 -12 tls_handshake 2115 2095 -20 hmac 87 61 -26 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/6 up/down: 0/-73) Total: -73 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: simplify bc_num_parseDecimal() furtherDenys Vlasenko
function old new delta bc_program_num 925 912 -13 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: make all function pointers FAST_FUNC, on i486 this saves ~400 bytesDenys Vlasenko
function old new delta bc_num_rem 91 95 +4 bc_num_inv 53 56 +3 bc_num_d 569 572 +3 bc_num_printDigits 136 137 +1 bc_program_assign 486 485 -1 dc_lex_token 684 682 -2 bc_vec_pop 27 25 -2 bc_vec_npop 55 53 -2 bc_program_read 335 333 -2 bc_program_print 713 711 -2 bc_parse_parse 462 460 -2 bc_lex_token 1280 1278 -2 bc_num_printChar 27 24 -3 bc_num_binary 150 147 -3 dc_parse_parse 59 55 -4 bc_vm_run 630 626 -4 bc_num_printHex 71 67 -4 bc_num_divmod 155 150 -5 bc_vec_free 24 18 -6 bc_string_free 15 9 -6 bc_num_free 15 9 -6 bc_id_free 15 9 -6 bc_parse_free 53 46 -7 bc_program_scale 8 - -8 bc_num_r 245 237 -8 bc_func_free 35 27 -8 bc_result_free 57 46 -11 bc_num_a 454 443 -11 bc_num_sub 77 65 -12 bc_num_add 77 65 -12 bc_program_modexp 736 723 -13 bc_num_s 252 239 -13 bc_num_mul 62 49 -13 bc_num_mod 62 49 -13 bc_num_div 62 49 -13 bc_num_pow 47 31 -16 bc_program_exec 4081 4059 -22 bc_num_printNum 514 489 -25 bc_num_p 478 445 -33 bc_program_len 34 - -34 bc_program_num 963 925 -38 bc_num_k 988 944 -44 ------------------------------------------------------------------------------ (add/remove: 0/2 grow/shrink: 4/36 up/down: 11/-416) Total: -405 bytes text data bss dec hex filename 984536 485 7296 992317 f243d busybox_old 984131 485 7296 991912 f22a8 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: 0xffffffffffffffff may be larger than unsigned longDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: optimize bc_vec_concat()Denys Vlasenko
function old new delta bc_vec_concat 71 66 -5 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: simplify bc_program_len()Denys Vlasenko
function old new delta bc_program_len 42 34 -8 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: simplify bc_program_print()Denys Vlasenko
function old new delta bc_program_print 730 713 -17 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: simplify bc_num_ulong2num()Denys Vlasenko
function old new delta bc_num_ulong2num 64 59 -5 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10bc: move str-to-num conversion functions to their only caller, bc_num_parse()Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09bc: further simplify string-to-number conversion codeDenys Vlasenko
function old new delta bc_program_index 66 64 -2 bc_program_num 983 963 -20 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-22) Total: -22 bytes text data bss dec hex filename 985706 477 7296 993479 f28c7 busybox_old 985684 477 7296 993457 f28b1 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09bc: simplify string-tonumber conversion codeDenys Vlasenko
function old new delta bc_program_num 1108 983 -125 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-125) Total: -125 bytes text data bss dec hex filename 985831 477 7296 993604 f2944 busybox_old 985706 477 7296 993479 f28c7 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09bc: no need to "set to zero" BcNum after bc_num_init(), it already isDenys Vlasenko
function old new delta bc_num_init 48 49 +1 bc_program_num 1115 1108 -7 bc_program_exec 4098 4081 -17 bc_vm_init 786 768 -18 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/3 up/down: 1/-42) Total: -41 bytes text data bss dec hex filename 985872 477 7296 993645 f296d busybox_old 985831 477 7296 993604 f2944 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09bc: add and use bc_num_init_DEF_SIZE()Denys Vlasenko
function old new delta bc_num_init_DEF_SIZE - 10 +10 bc_num_binary 150 148 -2 bc_program_pushVar 208 203 -5 bc_program_modexp 741 736 -5 bc_program_copyToVar 316 311 -5 bc_program_call 352 347 -5 bc_array_expand 88 83 -5 bc_program_num 1125 1115 -10 bc_vm_init 821 786 -35 bc_program_exec 4152 4098 -54 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/9 up/down: 10/-126) Total: -116 bytes text data bss dec hex filename 985988 477 7296 993761 f29e1 busybox_old 985872 477 7296 993645 f296d busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09bc: in bc_program_execStr(), push two variables into inner scopeDenys Vlasenko
function old new delta bc_program_execStr 502 496 -6 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09bc: in bc_program_exec(), push two variables into inner scopeDenys Vlasenko
While at it, delete empty lines. function old new delta bc_program_exec 4179 4152 -27 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09bc: add accessors for G.prog.strs[idx], G.prog.fns[idx]Denys Vlasenko
function old new delta bc_program_str - 17 +17 bc_program_func - 17 +17 bc_program_addFunc 209 204 -5 bc_program_reset 70 64 -6 bc_program_printStream 163 157 -6 bc_program_print 736 730 -6 bc_vm_file 226 219 -7 bc_parse_text 143 133 -10 bc_parse_reset 163 153 -10 bc_parse_endBody 375 365 -10 bc_parse_create 168 158 -10 bc_parse_addFunc 41 31 -10 bc_program_call 364 352 -12 bc_program_read 350 335 -15 bc_program_execStr 528 502 -26 bc_program_exec 4219 4179 -40 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 0/14 up/down: 34/-173) Total: -139 bytes text data bss dec hex filename 985043 485 7296 992824 f2638 busybox_old 984904 485 7296 992685 f25ad busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08bc: eliminate always the same params to bc_num_printBase()Denys Vlasenko
function old new delta bc_program_print 739 736 -3 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08bc: remove redundant error checks in bc_parse_print()Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08bc: stop propagating pointer to G.prog.nchars deep into printing functionsDenys Vlasenko
function old new delta bc_num_printHex 62 71 +9 bc_num_printNewline 47 54 +7 bc_num_printDigits 132 136 +4 bc_num_printChar 23 27 +4 bc_program_printStream 173 163 -10 bc_program_print 754 739 -15 bc_num_printNum 538 514 -24 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/3 up/down: 24/-49) Total: -25 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08bc: do not pass line width in parameters, it's in globalsDenys Vlasenko
function old new delta bc_num_printNewline 36 47 +11 bc_num_printHex 70 62 -8 bc_num_printDigits 142 132 -10 bc_program_printStream 185 173 -12 bc_program_print 773 754 -19 bc_num_printNum 563 538 -25 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/5 up/down: 11/-74) Total: -63 bytes text data bss dec hex filename 985122 485 7296 992903 f2687 busybox_old 985059 485 7296 992840 f2648 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08bc: remove "ready for more input" message, GNU bc does not print thatDenys Vlasenko
function old new delta bc_read_line 285 268 -17 bc_vm_run 684 630 -54 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-71) Total: -71 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08tls: AES-GCM: in GMULT, avoid memcpy, use one less variable in bit loopDenys Vlasenko
function old new delta GMULT 168 159 -9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08bc: trim banner, use empty interactive prompts (GNU bc compat)Denys Vlasenko
function old new delta bc_vm_run 689 684 -5 bc_program_read 355 350 -5 bc_read_line 307 285 -22 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-32) Total: -32 bytes text data bss dec hex filename 985409 485 7296 993190 f27a6 busybox_old 985265 485 7296 993046 f2716 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08dc: fix "small dc" to have standard command line APIDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08lineedit: fix "defined but not used" sigaction2 warningDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08mdev: suppress aliasing warningDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08inetd: suppress aliasing warningDenys Vlasenko
function old new delta sigprocmask2 - 8 +8 wait_for_child_or_signal 213 218 +5 dowait 424 429 +5 block_CHLD_HUP_ALRM 62 59 -3 sigprocmask_SIG_SETMASK 16 - -16 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 2/1 up/down: 18/-19) Total: -1 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08suppress gcc 8 aliasing warningsDenys Vlasenko
function old new delta sigprocmask_SIG_SETMASK - 16 +16 wait_for_child_or_signal 221 213 -8 dowait 432 424 -8 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08tls: make RIGHTSHIFTX() in AES-GCM fasterDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07bc: replace G.eof with a special exit code of bc_vm_stdin()Denys Vlasenko
function old new delta bc_read_line 305 307 +2 bc_vm_run 701 689 -12 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 2/-12) Total: -10 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07bc: convert two macros to functions, unwing one complex max(a,min(b,c))Denys Vlasenko
function old new delta BC_NUM_AREQ - 45 +45 BC_NUM_MREQ - 33 +33 bc_num_rem 104 91 -13 bc_num_divmod 168 155 -13 bc_num_d 584 569 -15 bc_num_mul 80 62 -18 bc_num_mod 80 62 -18 bc_num_div 80 62 -18 bc_num_sub 112 77 -35 bc_num_add 112 77 -35 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 0/8 up/down: 78/-165) Total: -87 bytes text data bss dec hex filename 985526 485 7296 993307 f281b busybox_old 985439 485 7296 993220 f27c4 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07bc: do not perform domr limit checks when they can't work (e.g. on 32-bit ↵Denys Vlasenko
arches) Also, optimize printing of messages with fixed limit strings by including limits as strings. function old new delta bc_num_ulong 103 95 -8 bc_lex_number 296 281 -15 dc_lex_token 701 684 -17 bc_lex_name 90 73 -17 bc_num_shift 72 54 -18 bc_lex_token 1299 1280 -19 bc_parse_stmt 1868 1768 -100 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/7 up/down: 0/-194) Total: -194 bytes text data bss dec hex filename 985814 485 7296 993595 f293b busybox_old 985526 485 7296 993307 f281b busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>