[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
RE: [cdt-dev] GDB-GDBserver problem
|
Hi Sheldon,
Regards,
Mikhail Khodjaiants
Hi,
As in my
previous mails, we are using gdbserver to debug GTK based applications . The
debugging worked perfectly in 3.1 but failed in 3.1.1,3.1.2 and 4.0 RC1 to
figure out the problem i enabled the GDB MI logging and got the following
output.
Output for
3.1GDB (gdb)
[1,181,727,547,315] 1-gdb-set confirm
off
[1,181,727,547,317] 1^done
[1,181,727,547,320] 2-gdb-set width
0
[1,181,727,547,320] (gdb)
[1,181,727,547,321]
2^done
[1,181,727,547,321] 3-gdb-set height 0
[1,181,727,547,322]
(gdb)
[1,181,727,547,322] 3^done
[1,181,727,547,323] 4-interpreter-exec
console echo
[1,181,727,547,323] (gdb)
[1,181,727,547,323] 4^done
[1,181,727,547,325] 5-gdb-show prompt
[1,181,727,547,325]
(gdb)
[1,181,727,547,326] 5^done,value="(gdb) "
[1,181,727,547,328]
6-target-select remote localhost:1234
[1,181,727,547,328]
(gdb)
[1,181,727,547,448]
6^connected,thread-id="0",frame={addr="0xb7f266b0",func="??",args=[]}
[1,181,727,547,459] (gdb)
[1,181,727,547,607] 7-gdb-set auto-solib-add
on
[1,181,727,547,608] 7^done
[1,181,727,547,611] 8-gdb-set
stop-on-solib-events 0
[1,181,727,547,611] (gdb)
[1,181,727,547,612]
8^done
[1,181,727,547,612] 9-gdb-set stop-on-solib-events
0
[1,181,727,547,613] (gdb)
[1,181,727,547,613]
9^done
[1,181,727,547,626] (gdb)
[1,181,727,547,658] 10-environment-cd
/scratchbox/users/sheldon/home/sheldon/workspace/clock
[1,181,727,547,658]
10^done
[1,181,727,547,659] (gdb)
[1,181,727,547,878]
11-environment-directory /scratchbox/users/sheldon/home/sheldon/workspace/clock
\
/scratchbox/users/sheldon/home/sheldon/workspace/clock/.settings
/scratchbox/users/sheldon/home/shel\
don/workspace/clock/autom4te.cache
/scratchbox/users/sheldon/home/sheldon/workspace/clock/images
/sc\
ratchbox/users/sheldon/home/sheldon/workspace/clock/images/.svn
/scratchbox/users/sheldon/home/sheld\
on/workspace/clock/images/.svn/prop-base
/scratchbox/users/sheldon/home/sheldon/workspace/clock/imag\
es/.svn/props
/scratchbox/users/sheldon/home/sheldon/workspace/clock/images/.svn/text-base
/scratchb\
ox/users/sheldon/home/sheldon/workspace/clock/images/.svn/wcprops
/scratchbox/users/sheldon/home/she\
ldon/workspace/clock/src
/scratchbox/users/sheldon/home/sheldon/workspace/clock/src/.deps /scratchbo\
x/users/sheldon/home/sheldon/workspace/clock/src/.svn
/scratchbox/users/sheldon/home/sheldon/workspa\
ce/clock/src/.svn/text-base
/scratchbox/users/sheldon/home/sheldon/workspace/clock/src/.svn/wcprops
[1,181,727,547,883]
11^done,source-path="/scratchbox/users/sheldon/home/sheldon/workspace/clock:/scr\
atchbox/users/sheldon/home/sheldon/workspace/clock/.settings:/scratchbox/users/sheldon/home/sheldon/\
workspace/clock/autom4te.cache:/scratchbox/users/sheldon/home/sheldon/workspace/clock/images:/scratc\
hbox/users/sheldon/home/sheldon/workspace/clock/images/.svn:/scratchbox/users/sheldon/home/sheldon/w\
orkspace/clock/images/.svn/prop-base:/scratchbox/users/sheldon/home/sheldon/workspace/clock/images/.\
svn/props:/scratchbox/users/sheldon/home/sheldon/workspace/clock/images/.svn/text-base:/scratchbox/u\
sers/sheldon/home/sheldon/workspace/clock/images/.svn/wcprops:/scratchbox/users/sheldon/home/sheldon\
/workspace/clock/src:/scratchbox/users/sheldon/home/sheldon/workspace/clock/src/.deps:/scratchbox/us\
ers/sheldon/home/sheldon/workspace/clock/src/.svn:/scratchbox/users/sheldon/home/sheldon/workspace/c\
lock/src/.svn/text-base:/scratchbox/users/sheldon/home/sheldon/workspace/clock/src/.svn/wcprops:$cdi\
r:$cwd"
[1,181,727,547,885]
(gdb)[1,181,727,547,886] 12 info
threads[1,181,727,547,888] &"info
threads\n"[1,181,727,547,888] ~" 1 Thread 6511
" [1,181,727,547,889]
12^done,frame={addr="0xb7f266b0",func="??",args=[]}[1,181,727,547,889]
(gdb)[1,181,727,547,901]
13-data-list-register-names
[1,181,727,547,902]
13^done,register-names=["eax","ecx","edx","ebx","esp","ebp","esi","edi","eip","e\
flags","cs","ss","ds","es","fs","gs","st0","st1","st2","st3","st4","st5","st6","st7","fctrl","fstat"\
,"ftag","fiseg","fioff","foseg","fooff","fop","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7\
","mxcsr","orig_eax","mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7"]
[1,181,727,547,904]
(gdb)
[1,181,727,547,921] 14-stack-info-depth
[1,181,727,547,926]
14^done,depth="1"
[1,181,727,547,927] 15-stack-list-frames 0
1
[1,181,727,547,928] (gdb)
[1,181,727,547,928]
15^done,stack=[frame={level="0",addr="0xb7f266b0",func="??"}]
[1,181,727,547,963] (gdb)
[1,181,727,548,076] 16-break-insert -t
main
[1,181,727,548,082]
16^done,bkpt={number="1",type="breakpoint",disp="del",enabled="y",addr="0x0804be\
60",func="main",file="clock.c",line="865",times="0"}
[1,181,727,548,083]
(gdb)
[1,181,727,548,088] 17-exec-continue
[1,181,727,548,141]
17^running
[1,181,727,548,142] (gdb)
[1,181,727,551,226] ~"[Switching to
Thread 16384]\n"
[1,181,727,551,272]
17*stopped,thread-id="2",frame={addr="0x0804be60",func="main",args=[{name="argc"\
,value="134528608"},{name="argv",value="0x1"}],file="
clock.c",line="865"}
[1,181,727,551,274] 18 info
threads
[1,181,727,551,274] (gdb)
[1,181,727,551,276] &"info
threads\n"
[1,181,727,551,299] ~"* 2 Thread 16384
"
[1,181,727,551,301]
18^done,frame={func="main",args=[{name="argc",value="134528608"},{name="argv",va\
lue="0x1"}],file="clock.c",line="865"}
[1,181,727,551,303]
19-stack-info-depth
[1,181,727,551,303] (gdb)
[1,181,727,551,304]
19^done,depth="1"
[1,181,727,551,304] 20-stack-list-frames 0 1
[1,181,727,551,305] (gdb)
[1,181,727,551,305]
20^done,stack=[frame={level="0",addr="0x0804be60",func="main",file="clock.c",lin\
e="865"}]
[1,181,727,551,307]
21-data-list-changed-registers
[1,181,727,551,307]
(gdb)
[1,181,727,551,308]
21^done,changed-registers=["0","1","2","3","4","5","6","7","8","9","10","11","12\
","13","15","24","26","40","41"]
[1,181,727,551,312] 22 info
sharedlibrary
[1,181,727,551,313] (gdb)
[1,181,727,551,313] &"info
sharedlibrary\n"
[1,181,727,551,328]
~"From
To Syms Read
Shared Object Library\n"
[1,181,727,551,328] ~"0xb7ba0080
0xb7e5cc84 Yes
/usr/local/lib/libgtk-directfb-2.0.so.0\n"
[1,181,727,551,328]
~"0xb7af2a40 0xb7b2cd64
Yes /usr/local/lib/libgdk-
directfb-2.0.so.0\n"
[1,181,727,551,329] ~"0xb7ace660 0xb7adaaf4
Yes
/usr/local/lib/libatk-1.0.so.0\n"
[1,181,727,551,335] ~"0xb7ab22b0
0xb7ac3a54 Yes
/usr/local/lib/libgdk_pixbuf- 2.0.so.0\n"
[1,181,727,551,335]
~"0xb7a8c4f0 0xb7aa3ad0
Yes
/lib/libm.so.6\n"
[1,181,727,551,335] ~"0xb7a82ce0 0xb7a86df4
Yes
/usr/local/lib/libpangocairo-1.0.so.0\n"
[1,181,727,551,335]
~"0xb7a47b50 0xb7a6b794
Yes
/usr/local/lib/libpango-1.0.so.0\n"
[1,181,727,551,335] ~"0xb79e6170
0xb7a34fb4 Yes
/usr/local/lib/libcairo.so.2\n"
[1,181,727,551,336] ~"0xb79ac0e0
0xb79d5f14 Yes
/usr/local/lib/libgobject- 2.0.so.0\n"
[1,181,727,551,418] ~"0xb79a3d00
0xb79a4d64 Yes
/usr/local/lib/libgmodule-2.0.so.0\n"
[1,181,727,551,418] ~"0xb791e2f0
0xb79683f4 Yes
/usr/local/lib/libglib-2.0.so.0\n "
[1,181,727,551,418] ~"0xb78b4980
0xb78fc2e4 Yes
/usr/local/lib/libfreetype.so.6\n"
[1,181,727,551,418] ~"0xb787be20
0xb789ef14 Yes
/usr/local/lib/libfontconfig.so.1\n"
[1,181,727,551,419] ~"0xb781ff40
0xb78699e4 Yes
/usr/local/lib/libdirectfb-1.0.so.0\n"
[1,181,727,551,419] ~"0xb7800de0
0xb780f424 Yes
/usr/local/lib/libz.so.1\n"
[1,181,727,551,419] ~"0xb77d75e0
0xb77fad64 Yes
/usr/local/lib/libpng12.so.0\n"
[1,181,727,551,419] ~"0xb77c6d30
0xb77d1174 Yes
/usr/local/lib/libfusion-1.0.so.0\n"
[1,181,727,551,419] ~"0xb77b4e80
0xb77c0944 Yes
/usr/local/lib/libdirect-1.0.so.0\n"
[1,181,727,551,421] ~"0xb7765170
0xb776da70 Yes
/lib/libpthread.so.0\n"
[1,181,727,551,421] ~"0xb775cc90
0xb775d920 Yes
/lib/libdl.so.2\n"
[1,181,727,551,421] ~"0xb7725a60 0xb7750d14
Yes
/usr/local/lib/libgtkmidp.so\n"
[1,181,727,551,422] ~"0xb76fdeb0
0xb7700804 Yes
/usr/local/lib/libcelapp.so\n"
[1,181,727,551,422] ~"0xb76f16e0
0xb76f8124 Yes
/usr/local/lib/libclpappmgr.so\n"
[1,181,727,551,422] ~"0xb76d5a70
0xb76e7674 Yes
/usr/local/lib/libdbus-glib-1.so.2\n"
[1,181,727,551,422] ~"0xb76a1b30
0xb76c8524 Yes
/usr/local/lib/libdbus- 1.so.3\n"
[1,181,727,551,422] ~"0xb7678c80
0xb7694f24 Yes
/usr/local/lib/libgconf-2.so.4\n"
[1,181,727,551,429] ~"0xb7574080
0xb764b17c Yes
/lib/libc.so.6\n"
[1,181,727,551,429] ~"0xb7f26690 0xb7f3582f
Yes /lib/ld-
linux.so.2\n"
[1,181,727,551,429] ~"0xb752fa00 0xb755b1c4
Yes
/usr/local/lib/libpangoft2-1.0.so.0\n"
[1,181,727,551,429] ~"0xb7519020
0xb751dac0 Yes
/lib/librt.so.1\n"
[1,181,727,551,429] ~"0xb741b440 0xb74f0894
Yes
/usr/local/lib/libxml2.so.2\n"
[1,181,727,551,430] ~"0xb73fb870
0xb73fea94 Yes
/usr/local/lib/libnotify.so.1\n"
[1,181,727,551,430] ~"0xb73e75b0
0xb73f3790 Yes
/lib/libnsl.so.1\n"
[1,181,727,551,430] 22^done
[1,181,727,551,430]
(gdb)
[1,181,727,551,989] 23-stack-list-arguments 0 0
0
[1,181,727,551,989]
23^done,stack-args=[frame={level="0",args=[name="argc",name="argv"]}]
[1,181,727,551,991] (gdb)
[1,181,727,551,993] 24-stack-list-locals
0
[1,181,727,551,994]
24^done,locals=[name="__PRETTY_FUNCTION__",name="err"]
[1,181,727,551,994]
(gdb)
[1,181,727,552,232] 25-var-create - * argc
[1,181,727,552,263]
25^done,name="var1",numchild="0",type="int"
[1,181,727,552,263]
(gdb)
[1,181,727,552,270] 26-var-evaluate-_expression_
var1
[1,181,727,552,271] 26^done,value="134528608"
[1,181,727,552,271]
(gdb)
[1,181,727,552,285] 27-var-create - * argv
[1,181,727,552,286]
27^done,name="var2",numchild="1",type="char **"
[1,181,727,552,286]
(gdb)
[1,181,727,552,288] 28-var-evaluate-_expression_ var2
[1,181,727,552,288] 28^done,value="0x1"
[1,181,727,552,289]
(gdb)
[1,181,727,552,291] 29-var-create - *
__PRETTY_FUNCTION__
[1,181,727,552,292]
29^done,name="var3",numchild="5",type="const char [5]"
[1,181,727,552,292]
(gdb)
[1,181,727,552,297] 30-var-create - * err
[1,181,727,552,298]
30^done,name="var4",numchild="3",type="GError *"
[1,181,727,552,299]
(gdb)
[1,181,727,552,301] 31 ptype GError *
[1,181,727,552,303]
&"ptype GError *\n"
[1,181,727,552,303] ~"type = struct _GError
{\n"
[1,181,727,552,303] ~" GQuark
domain;\n"
[1,181,727,552,304] ~" gint code;\n"
[1,181,727,552,304] ~" gchar
*message;\n"
[1,181,727,552,304] ~"} *\n"
[1,181,727,552,304]
31^done
[1,181,727,552,304] (gdb)
[1,181,727,552,311]
32-var-evaluate-_expression_ var4
[1,181,727,552,312] 32^done,value="0x8049b00"
[1,181,727,552,312] (gdb)
[1,181,727,555,876]
33-exec-continue
[1,181,727,555,877] 33^running
[1,181,727,555,877]
(gdb)
[1,181,727,561,011]
33*stopped,reason="exited-normally"
[1,181,727,561,012] (gdb)
[1,181,727,561,043] 34-data-evaluate-_expression_
$_exitcode
[1,181,727,561,044] 34^done,value="0"
[1,181,727,561,044]
(gdb)
[1,181,727,561,211] 35-gdb-exit
[1,181,727,561,215]
35^exit
Output for
3.1.1/3.1.2/4.0RC*1,181,728,251,279] gdb -q -nw -i mi
/home/sheldon/workspace/clock/src/clock
[1,181,728,251,467] 1-gdb-set confirm
off
[1,181,728,251,471] 1^done
[1,181,728,251,473] 2-gdb-set width 0
[1,181,728,251,473] (gdb)
[1,181,728,251,473]
2^done
[1,181,728,251,473] 3-gdb-set height 0
[1,181,728,251,474]
(gdb)
[1,181,728,251,474] 3^done
[1,181,728,251,474] 4-interpreter-exec
console echo
[1,181,728,251,474] (gdb)
[1,181,728,251,474]
4^done
[1,181,728,251,475] 5-gdb-show prompt
[1,181,728,251,475]
(gdb)
[1,181,728,251,475] 5^done,value="(gdb) "
[1,181,728,251,478]
6-gdb-set auto-solib-add on
[1,181,728,251,478] (gdb)
[1,181,728,251,479]
6^done
[1,181,728,251,479] 7-gdb-set stop-on-solib-events
0
[1,181,728,251,479] (gdb)
[1,181,728,251,479]
7^done
[1,181,728,251,480] 8-gdb-set stop-on-solib-events
0
[1,181,728,251,480] (gdb)
[1,181,728,251,480]
8^done
[1,181,728,251,481] 9-target-select remote
localhost:1234
[1,181,728,251,481] (gdb)
[1,181,728,251,487]
9^connected,thread-id="0",frame={addr="0xb7fdf6b0",func="??",args=[]}
[1,181,728,251,491] 10-environment-cd
/scratchbox/users/sheldon/home/sheldon/workspace/clock
[1,181,728,251,491]
(gdb)
[1,181,728,251,495] 10^done
[1,181,728,251,497]
(gdb)
[1,181,728,251,549] 11-environment-directory
/scratchbox/users/sheldon/home/sheldon/workspace/clock \
/scratchbox/users/sheldon/home/sheldon/workspace/clock/.settings
/scratchbox/users/sheldon/home/shel\
don/workspace/clock/autom4te.cache
/scratchbox/users/sheldon/home/sheldon/workspace/clock/images
/sc\
ratchbox/users/sheldon/home/sheldon/workspace/clock/images/.svn
/scratchbox/users/sheldon/home/sheld\
on/workspace/clock/images/.svn/prop-base
/scratchbox/users/sheldon/home/sheldon/workspace/clock/imag\
es/.svn/props
/scratchbox/users/sheldon/home/sheldon/workspace/clock/images/.svn/text-base
/scratchb\
ox/users/sheldon/home/sheldon/workspace/clock/images/.svn/wcprops
/scratchbox/users/sheldon/home/she\
ldon/workspace/clock/src
/scratchbox/users/sheldon/home/sheldon/workspace/clock/src/.deps
/scratchbo\
x/users/sheldon/home/sheldon/workspace/clock/src/.svn
/scratchbox/users/sheldon/home/sheldon/workspa\
ce/clock/src/.svn/text-base
/scratchbox/users/sheldon/home/sheldon/workspace/clock/src/.svn/wcprops
[1,181,728,251,552]
11^done,source-path="/scratchbox/users/sheldon/home/sheldon/workspace/clock:/scr\
atchbox/users/sheldon/home/sheldon/workspace/clock/.settings:/scratchbox/users/sheldon/home/sheldon/\
workspace/clock/autom4te.cache:/scratchbox/users/sheldon/home/sheldon/workspace/clock/images:/scratc\
hbox/users/sheldon/home/sheldon/workspace/clock/images/.svn:/scratchbox/users/sheldon/home/sheldon/w\
orkspace/clock/images/.svn/prop-base:/scratchbox/users/sheldon/home/sheldon/workspace/clock/images/.\
svn/props:/scratchbox/users/sheldon/home/sheldon/workspace/clock/images/.svn/text-base:/scratchbox/u\
sers/sheldon/home/sheldon/workspace/clock/images/.svn/wcprops:/scratchbox/users/sheldon/home/sheldon\
/workspace/clock/src:/scratchbox/users/sheldon/home/sheldon/workspace/clock/src/.deps:/scratchbox/us\
ers/sheldon/home/sheldon/workspace/clock/src/.svn:/scratchbox/users/sheldon/home/sheldon/workspace/c\
lock/src/.svn/text-base:/scratchbox/users/sheldon/home/sheldon/workspace/clock/src/.svn/wcprops:$cdi\
r:$cwd"
[1,181,728,251,553] (gdb)[1,181,728,251,554] 12 info
threads[1,181,728,251,554] &"info
threads\n"[1,181,728,251,556] ~" 1 Thread 7424
"[1,181,728,251,556]
12^done,frame={addr="0xb7fdf6b0",func="??",args=[]} [1,181,728,251,556] (gdb)[1,181,728,251,561] 13-thread-select 1
[1,181,728,251,562]
13^done,new-thread-id="1",frame={level="0",addr="0xb7fdf6b0",func="??",args=[]}
[1,181,728,251,562] (gdb)[1,181,728,251,564] 14 info
threads[1,181,728,251,564] &"info
threads\n"[1,181,728,251,564] ~"* 1 Thread 7424
" [1,181,728,251,564]
14^done,frame={addr="0xb7fdf6b0",func="??",args=[]}[1,181,728,251,565]
(gdb)[1,181,728,251,565]
15-stack-info-depth
[1,181,728,251,568]
15^done,depth="1"
[1,181,728,251,568] (gdb)
[1,181,728,251,580]
16-data-list-register-names
[1,181,728,251,583]
16^done,register-names=["eax","ecx","edx","ebx","esp","ebp","esi","edi","eip","e\
flags","cs","ss","ds","es","fs","gs","st0","st1","st2","st3","st4","st5","st6","st7","fctrl","fstat"\
,"ftag","fiseg","fioff","foseg","fooff","fop","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7\
","mxcsr","orig_eax","mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7"]
[1,181,728,251,584]
(gdb)
[1,181,728,251,597] 17-stack-list-frames 0 1
[1,181,728,251,607]
17^done,stack=[frame={level="0",addr="0xb7fdf6b0",func="??"}]
[1,181,728,251,613]
(gdb)
[1,181,728,251,614] 18-break-insert -t main
[1,181,728,251,614]
18^done,bkpt={number="1",type="breakpoint",disp="del",enabled="y",addr="0x0804be\
60",func="main",file="clock.c",line="865",times="0"}
[1,181,728,251,635]
(gdb)
[1,181,728,251,647] 19-exec-continue
[1,181,728,251,655]
19^running
[1,181,728,251,655] (gdb)
[1,181,728,260,123]
19*stopped,reason="exited-normally"
[1,181,728,260,138]
20-data-evaluate-_expression_ $_exitcode
[1,181,728,260,125]
(gdb)
[1,181,728,260,139] 20^done,value="0"
[1,181,728,260,139] (gdb)
[1,181,728,260,216] 21-gdb-exit
[1,181,728,260,219]
21^exit
the problem was due to the commands in red a thread select
was fired in 3.1.1 which caused the debug session to fail. I made the following
changes to Target class
/**
* Do the real work
of call -thread-list-ids.
*/
public Thread[] getCThreads() throws CDIException
{
Thread[] cthreads =
noThreads;
try
{
lockTarget();
RxThread rxThread =
miSession.getRxThread();
rxThread.setEnableConsole(false);
CommandFactory factory =
miSession.getCommandFactory();
CLIInfoThreads tids = factory.createCLIInfoThreads
();
//
HACK/FIXME: gdb/mi thread-list-ids does
not
//
show any newly create thread, we workaround
by
//
issuing "info threads"
instead.
// MIThreadListIds tids =
factory.createMIThreadListIds();
// MIThreadListIdsInfo info =
tids.getMIThreadListIdsInfo();
miSession.postCommand(tids);
CLIInfoThreadsInfo info = tids.getMIInfoThreadsInfo();
int[]
ids;
String[]
names;
if
(info == null)
{
ids = new
int[0];
names = new
String[0];
} else
{
ids =
info.getThreadIds();
names =
info.getThreadNames();
currentThreadId =
info.getCurrentThread();
}
if (ids
!= null && ids.length > 0)
{
cthreads = new Thread[
ids.length];
// Ok that means it is a
multiThreaded.
if (names != null && names.length == ids.length)
{
for (int i = 0; i < ids.length; i++)
{
cthreads[i] = new Thread(this, ids[i], names[i]);
}
} else
{
for (int i = 0; i < ids.length; i++)
{
cthreads[i] = new Thread(this,
ids[i]);
}
}
} else
{
// Provide a
dummy.
cthreads = new Thread[]{new Thread(this,
0)};
}
// FIX:
When attaching there is no thread
selected
// We will choose the first one as a workaround.
if (currentThreadId == 0 && cthreads.length
> 0) {
currentThreadId =
cthreads[0].getId();
Similar to what is happening in 3.1//
setCurrentThread(cthreads[0],
false);
} } catch
(MIException e)
{
// Do
not throw anything in this
case.
throw new CDIException(
e.getMessage());
} finally
{
RxThread
rxThread =
miSession.getRxThread();
rxThread.setEnableConsole(true);
releaseTarget();
}
return
cthreads;
}
and things are working now, I would
like to know if this is the way to go or there is better solution to this
problem.
Regards,
--
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.