PHP  
 PHP_HEAD
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

Valgrind Report for ext/openssl/tests/streams_crypto_method.phpt ('Specific crypto method for ssl:// transports.')

Script

1: <?php
2: $serverCode 
= <<<'CODE'
3:
    $serverUri = "ssl://127.0.0.1:64321";
4:     $serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
5:     $serverCtx = stream_context_create(['ssl' => [
6:         'local_cert' => __DIR__ . '/streams_crypto_method.pem',
7:     ]]);
8:
9:     $server = stream_socket_server($serverUri, $errno, $errstr, $serverFlags, $serverCtx);
10:     phpt_notify();
11:
12:     $client = @stream_socket_accept($server);
13:     if ($client) {
14:         $in = '';
15:         while (!preg_match('/\r?\n\r?\n/', $in)) {
16:             $in .= fread($client, 2048);
17:         }
18:         $response = "HTTP/1.0 200 OK\r\n"
19:                   . "Content-Type: text/plain\r\n"
20:                   . "Content-Length: 12\r\n"
21:                   . "Connection: close\r\n"
22:                   . "\r\n"
23:                   . "Hello World!";
24:         fwrite($client, $response);
25:         fclose($client);
26:     }
27:
CODE;
28:
29:
$clientCode = <<<'CODE'
30:
    $serverUri = "https://127.0.0.1:64321/";
31:     $clientFlags = STREAM_CLIENT_CONNECT;
32:     $clientCtx = stream_context_create(['ssl' => [
33:         'crypto_method' => STREAM_CRYPTO_METHOD_SSLv3_CLIENT,
34:         'verify_peer' => false,
35:         'verify_peer_name' => false
36:     ]]);
37:
38:     phpt_wait();
39:     echo file_get_contents($serverUri, false, $clientCtx);
40:
CODE;
41:
42: include 
'ServerClientTestCase.inc';
43:
ServerClientTestCase::getInstance()->run($clientCode$serverCode);
44:

Report

==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0x8AAE3C3: ssl3_read_bytes (in /usr/lib64/libssl.so.1.0.1e)
==25155==    by 0x8AA9D4F: ??? (in /usr/lib64/libssl.so.1.0.1e)
==25155==    by 0x5093FF: php_openssl_sockop_read (xp_ssl.c:1836)
==25155==    by 0xF2841A: _php_stream_fill_read_buffer (streams.c:696)
==25155==    by 0xF29176: _php_stream_get_line (streams.c:979)
==25155==    by 0xDD4E8C: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:659)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0x4C29731: memchr (mc_replace_strmem.c:762)
==25155==    by 0xF28E3A: php_stream_locate_eol (streams.c:879)
==25155==    by 0xF28F5B: _php_stream_get_line (streams.c:926)
==25155==    by 0xDD4E8C: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:659)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0x4C29740: memchr (mc_replace_strmem.c:762)
==25155==    by 0xF28E3A: php_stream_locate_eol (streams.c:879)
==25155==    by 0xF28F5B: _php_stream_get_line (streams.c:926)
==25155==    by 0xDD4E8C: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:659)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155== 
==25155== Use of uninitialised value of size 8
==25155==    at 0xA629ED0: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xA629EF9: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xA629F01: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xA629F11: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xA629F1B: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xA629F59: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xA629F86: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xA629FDF: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xA62A009: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xA629FE8: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xA629FEE: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Use of uninitialised value of size 8
==25155==    at 0xA629FC5: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xA62A049: ____strtol_l_internal (in /lib64/libc-2.12.so)
==25155==    by 0xA626C6F: atoi (in /lib64/libc-2.12.so)
==25155==    by 0xDD4ED9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:663)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xDD4FE7: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:677)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155==    by 0x121E811: do_cli (php_cli.c:978)
==25155==    by 0x122028E: main (php_cli.c:1356)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xDD5005: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:677)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155==    by 0x121E811: do_cli (php_cli.c:978)
==25155==    by 0x122028E: main (php_cli.c:1356)
==25155== 
==25155== Conditional jump or move depends on uninitialised value(s)
==25155==    at 0xDD51E9: php_stream_url_wrap_http_ex (http_fopen_wrapper.c:696)
==25155==    by 0xDD6FDF: php_stream_url_wrap_http (http_fopen_wrapper.c:919)
==25155==    by 0xF2E75C: _php_stream_open_wrapper_ex (streams.c:2068)
==25155==    by 0xCF5277: zif_file_get_contents (file.c:547)
==25155==    by 0xA8BBB7: phar_file_get_contents (func_interceptors.c:219)
==25155==    by 0x10A24CC: ZEND_DO_FCALL_SPEC_HANDLER (zend_vm_execute.h:565)
==25155==    by 0x109FE61: execute_ex (zend_vm_execute.h:352)
==25155==    by 0x10A0A50: zend_execute (zend_vm_execute.h:381)
==25155==    by 0xFF662D: zend_execute_scripts (zend.c:1266)
==25155==    by 0xEF9B07: php_execute_script (main.c:2560)
==25155==    by 0x121E811: do_cli (php_cli.c:978)
==25155==    by 0x122028E: main (php_cli.c:1356)
==25155== 

 

Generated at Tue, 14 Oct 2014 07:25:56 +0000 (7 days ago)

Copyright © 2005-2014 The PHP Group
All rights reserved.