Re: LONG RAW data size
Date: Wed, 26 Feb 2003 19:06:03 GMT
Message-ID: <ve87a.72027$zF6.5042014_at_bgtnsc04-news.ops.worldnet.att.net>
Pablo,
Thanks for the sample code. This is pretty much what I've implemented in the attached test program. However, in the OCIDefineByPos() call I have to specify the amount of data that's stored in the LONG RAW column.
The sample program can handle LONG RAW columns of any size by passing in 2GB (the max size possible) to OCIDefineByPos(). I haven't noticed any adverse effects by using such a large value but, I vaguely recall something about Oracle using this parameter for buffer allocation on the server side. Do you know if specifying such a large value for this parameter can cause problems?
The bigger issue is that I'm not able to determine the actual amount of data that's returned by the last piecewise fetch operation. The OCI interface isn't setting the data size (I/O) parameter that I provide via OCIStmtSetPieceInfo().
In your program how do you determine the actual size of the LONG RAW data that's being returned by the last fetch?
Thanks again for you help.
Massis
**
#include <stdio.h> #include <string.h> #include <oci.h>
#define MAXCOLSIZE 400
#define MAXROWS 5002
int ErrHandler( dvoid *err,
int iHandleType);
main()
{
int ServerConnect ( OCIEnv **pphEnv,
OCIServer **phSrv, OCIError **pphError); int EstSess ( OCIEnv *phEnv, OCIServer *phSrv, OCIError *phErr, OCISvcCtx **pphService, OCISession **pphSess, OCITrans **pphTrans); int ExecSel ( OCIEnv *phEnv, OCISvcCtx *phService, OCIError *phErr, char *pszSqlStmt, char *pszKeyValue);
OCISvcCtx *phService;
OCISession *phSession;
OCITrans *phTrans;
OCIEnv *phEnv = 0;
OCIServer *phSrv = 0;
OCIError *phErr = 0;
int rc;
/* ESTABLISH HANDLES AND CONNECT TO THE SERVER */ if (ServerConnect (&phEnv, &phSrv, &phErr) == OCI_ERROR) return OCI_ERROR;
/* ESTABLISH TRANSACTION A AND EXECUTE STATEMENT */ if (rc = (EstSess ( phEnv, phSrv, phErr,
&phService, &phSession, &phTrans)))
{
if (rc == 1)
ErrHandler((dvoid *) phEnv, OCI_HTYPE_ENV); else
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR); }
/* EXECUTE A SELECT STATEMENT */
ExecSel ( phEnv, phService, phErr,
"SELECT key, code, data FROM VOC WHERE key = :KEY", "TESTREC");
return 0;
}
int ExecSel ( OCIEnv *phEnv,
OCISvcCtx *phService,
OCIError *phErr,
char *pszSqlStmt,
char *pszKeyValue)
{
OCIParam *phStmtParam = 0;
OCIDefine *phDefine = 0;
OCIStmt *phStmt = 0;
OCIBind *phBind = 0;
int nParamCnt;
/*
char txtColName[1024];
ub2 nDataType;
ub2 nDataSize;
ub2 nBufSize;
*/
ub2 nActSize;
char szKey[300];
char szCode[20];
char szData[32000];
sword status;
/* ESTABLISH STATEMENT HANDLE */
if (OCIHandleAlloc ((dvoid *) phEnv, (dvoid **) &phStmt,
OCI_HTYPE_STMT, 0, (dvoid **) 0))
{
ErrHandler((dvoid *) phEnv, OCI_HTYPE_ENV);
return OCI_ERROR;
}
/* PREP & EXECUTE STATEMENT */
if (OCIStmtPrepare(phStmt, phErr, (text *) pszSqlStmt, strlen(pszSqlStmt),
(ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT))
{
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);
return OCI_ERROR;
}
/* MAP INPUT PARAMETERS */ if (OCIBindByName(phStmt, &phBind, phErr, (text *) ":KEY",
-1, (dvoid *) pszKeyValue, strlen(pszKeyValue), 1, (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT))
{
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR); return OCI_ERROR;
}
/* MAP OUTPUT DATA VARAIBLES */
if (OCIDefineByPos (phStmt, &phDefine, phErr, 1,
(dvoid *) szKey, 300, 1,
(dvoid *) 0, (ub2 *) &nActSize, (ub2 *) 0, 0)) // key
{
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);
return OCI_ERROR;
}
if (OCIDefineByPos (phStmt, &phDefine, phErr, 2,
(dvoid *) szCode, 11, 1,
(dvoid *) 0, (ub2 *) &nActSize, (ub2 *) 0, 0)) // code
{
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);
return OCI_ERROR;
}
if (OCIDefineByPos (phStmt, &phDefine, phErr, 3,
(dvoid *) szData, 2147483647, 24,
(dvoid *) 0, (ub2 *) &nActSize, (ub2 *) 0, OCI_DYNAMIC_FETCH)) // data
{
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);
return OCI_ERROR;
}
/* EXECUTE THE SQL STATEMENT */
if (status = OCIStmtExecute(phService, phStmt, phErr, 0, 0,
(CONST OCISnapshot *) 0, (OCISnapshot *) 0, (ub4) OCI_DEFAULT))
{
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);
return OCI_ERROR;
}
/* DETERMINE THE ATTRIBUTES OF COLUMN IN SELECT-LIST */ if (OCIAttrGet ((dvoid *) phStmt, (ub4) OCI_HTYPE_STMT,
(dvoid *) &nParamCnt, (ub4 *) 0, (ub4) OCI_ATTR_PARAM_COUNT, phErr))
{
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR); return OCI_ERROR;
}
/*
for (i = 1; i <= nParamCnt; i++)
{
if (OCIParamGet ((dvoid *) phStmt, OCI_HTYPE_STMT, phErr, (dvoid **) &phStmtParam, i))
{
ErrHandler((dvoid *) phEnv, OCI_HTYPE_ENV); return OCI_ERROR;
}
nBufSize = sizeof(txtColName);
if (OCIAttrGet ((dvoid *) phStmtParam,
(ub4) OCI_DTYPE_PARAM, (dvoid *) txtColName, (ub4 *) &nBufSize, (ub4) OCI_ATTR_NAME, phErr))
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);
txtColName[nBufSize] = 0;
if (OCIAttrGet ((dvoid *) phStmtParam, (ub4) OCI_DTYPE_PARAM, (ub2 *) &nDataType, (ub4 *) 0, (ub4) OCI_ATTR_DATA_TYPE, phErr))
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);
if (OCIAttrGet ((dvoid *) phStmtParam, (ub4) OCI_DTYPE_PARAM, (ub2 *) &nDataSize, (ub4 *) 0, (ub4) OCI_ATTR_DATA_SIZE, phErr))
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR); }
*/
if (status == OCI_NO_DATA) // Fetch the remaining data
*szData = 0;
else if (status == OCI_ERROR)
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);
else
{
long totalsize = 0;
ub1 nxp = OCI_FETCH_NEXT;
while ( (status = OCIStmtFetch(phStmt, phErr, 1, nxp, OCI_DEFAULT)) ==
OCI_NEED_DATA)
{
OCIDefine *phDef;
ub4 nHandleType;
ub1 nDir;
ub4 nRowNum;
ub4 nArrIdx;
ub2 nRCode;
ub1 nPiece;
ub4 nLen;
if (OCIStmtGetPieceInfo (
phStmt, phErr, (void **) &phDef, &nHandleType, &nDir, &nRowNum, &nArrIdx, &nPiece))
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);
nLen = sizeof(szData);
if (OCIStmtSetPieceInfo (
phDef, nHandleType, phErr, szData, &nLen, nPiece, (void *) 0, &nRCode))
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);
totalsize += nLen;
printf("total size = %d\n", totalsize);
} // while status = OCI_NEED_DATA
}
if (status != OCI_SUCCESS)
ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);
OCIHandleFree((dvoid *) phStmt, OCI_HTYPE_STMT); /* Free handles */
return 0;
}
int EstSess(OCIEnv *phEnv, OCIServer *phSrv, OCIError *phErr, OCISvcCtx **pphService,
OCISession **pphSess, OCITrans **pphTrans)
{
if (OCIHandleAlloc ((dvoid *) phEnv, (dvoid **) pphService, // create
service handle
OCI_HTYPE_SVCCTX, 0, (dvoid **) 0)) return 1;
if (OCIAttrSet ((dvoid *) *pphService, (ub4) OCI_HTYPE_SVCCTX,
(dvoid *) phSrv, (ub4) 0, OCI_ATTR_SERVER, phErr)) // set server
context
return 2;
if (OCIHandleAlloc ((dvoid *) phEnv, (dvoid **) pphSess,
OCI_HTYPE_SESSION, 0, (dvoid **) 0)) return 1;
if (OCIAttrSet ((dvoid *) *pphSess, OCI_HTYPE_SESSION, (dvoid *) "MI",
(ub4) strlen("MI"), OCI_ATTR_USERNAME, phErr)) // set user name attr
for session
return 2;
if (OCIAttrSet ((dvoid *) *pphSess, OCI_HTYPE_SESSION, (dvoid *) "GO", (ub4) strlen("GO"),
OCI_ATTR_PASSWORD, phErr)) // set user pwd attr for session return 2;
if (OCISessionBegin ((OCISvcCtx *) *pphService, phErr, *pphSess,
OCI_CRED_RDBMS, OCI_DEFAULT))
return 2;
if (OCIAttrSet ((dvoid *) *pphService, OCI_HTYPE_SVCCTX,
(dvoid *) *pphSess, (ub4) 0, OCI_ATTR_SESSION, phErr)) // associate
user session with SRVCTX
return 2;
/* ESTABLISH TRANSACTION */ if (OCIHandleAlloc ((dvoid *) phEnv, (dvoid **) pphTrans,
OCI_HTYPE_TRANS, 0, (dvoid **) 0)) return 1;
if (OCIAttrSet ((dvoid *) *pphService, (ub4) OCI_HTYPE_SVCCTX,
(dvoid *) *pphTrans, (ub4) 0, OCI_ATTR_TRANS, phErr)) // set server
context
return 2;
if (OCITransStart(*pphService, phErr, 0, OCI_DEFAULT)) /* START NEW TRANS
*/
return 2;
return 0;
}
int ServerConnect( OCIEnv **pphEnv,
OCIServer **pphSrv, OCIError **pphErr)
{
/* INITIALIZE ORACLE OCI */ if (OCIInitialize ((ub4) OCI_DEFAULT, (dvoid *) 0,
(dvoid * (*) (dvoid *, size_t)) 0, (dvoid * (*) (dvoid *, dvoid *, size_t)) 0, (void (*) (dvoid *, dvoid *)) 0))
{
printf("ERROR: OCIInitialize()\n");
return OCI_ERROR;
}
/* ESTABLISH ENVIRONMENT FOR REMAINING OCI CALLS */
if (OCIEnvInit((OCIEnv **) pphEnv, OCI_DEFAULT, 0, (dvoid **) 0))
{
ErrHandler(*pphEnv, OCI_HTYPE_ENV);
return OCI_ERROR;
}
/* ESTABLISH GLOBAL ERROR HANDLE */
if (OCIHandleAlloc ((dvoid *) *pphEnv, (dvoid **) pphErr, // create an
error handle
OCI_HTYPE_ERROR, 0, (dvoid **) 0))
{
ErrHandler(*pphEnv, OCI_HTYPE_ENV);
return OCI_ERROR;
}
/* ATTACH TO SERVER */
if (OCIHandleAlloc ((dvoid *) *pphEnv, (dvoid **) pphSrv,
OCI_HTYPE_SERVER, 0, (dvoid **) 0))
{
ErrHandler((dvoid *) *pphEnv, OCI_HTYPE_ENV);
return OCI_ERROR;
}
if (OCIServerAttach (*pphSrv, *pphErr, (text *) "ORA8", strlen("ORA8"),
(ub4) OCI_DEFAULT))
{
ErrHandler((dvoid *) *pphErr, OCI_HTYPE_ERROR);
return OCI_ERROR;
}
return 0;
}
int ErrHandler(dvoid * phError, int iHandleType)
{
text msgbuf[512];
int errcode;
if (iHandleType == OCI_HTYPE_ERROR)
{
OCIErrorGet((dvoid *) phError, (ub4) 1, (text *) NULL, &errcode,
msgbuf, (ub4) sizeof(msgbuf), OCI_HTYPE_ERROR);
}
else
{
OCIErrorGet((dvoid *) phError, (ub4) 1, (text *) NULL, &errcode,
msgbuf, (ub4) sizeof(msgbuf), OCI_HTYPE_ENV);
}
printf("Error code: %d - %.*s\n", errcode, 512, msgbuf);
return 1;
}
***
"Pablo Sanchez" <pablo_at_dev.null> wrote in message news:Xns932DC709918AEpingottpingottbah_at_216.166.71.233...
> "Massis Isagholian" <massis_at_isagholian.com> wrote in > news:xWU6a.761$Uy4.64672_at_bgtnsc05-news.ops.worldnet.att.net: > > > Unfortunately, both single and piecewise fetch operations (with > > OCI8) require priori knowledge of data size (number of bytes) in > > LONG RAW columns. Pre-allocating the 2GB max memory is obviously out > > of the question. > > I don't think you need to know the size beforehand. Here's a snippet > of code that I wrote with some comments: > > /* Ensure that OCI_NEED_DATA is returned */ > status = OCIStmtFetch(*l_dbproc.statement_hp, > *l_dbproc.error_hp, > (sword ) 1, > OCI_FETCH_NEXT, > OCI_DEFAULT); > > /* In typical situations, this would be in a while-loop but > ** we know that XXXX expects the entire chunk rather than piecemeal > */ > > if (status == OCI_NEED_DATA) { > status = OCIStmtGetPieceInfo(*l_dbproc.statement_hp, > *l_dbproc.error_hp, > (dvoid **) &define_hp, > (ub4 *) &type_hp, > (ub1 *) &in_out, > (ub4 *) &iter, > (ub4 *) &idx, > (ub1 *) &piece); > > if (status) > { > assign_cda_retcode(status); > return(status); > } > > status = OCIStmtSetPieceInfo((dvoid *) define_hp, > type_hp, > *l_dbproc.error_hp, > (dvoid *) buf, > (ub4 *) &len, > piece, > (dvoid *) &ind, > (ub2 *) &return_code); > > if (status) > { > assign_cda_retcode(status); > return(status); > } > > status = OCIStmtFetch(*l_dbproc.statement_hp, > *l_dbproc.error_hp, > (sword ) 1, > OCI_FETCH_NEXT, > OCI_DEFAULT); > > if (status != OCI_SUCCESS) > { > if (status) > { > assign_cda_retcode(status); > return(status); > } > } > } > else > { > if(status) > { > assign_cda_retcode(status); > return(status); > } > } > -- > Pablo Sanchez, High-Performance Database Engineering > http://www.hpdbe.com
begin 666 OraMultiTrans.cpp
M(VEN8VQU9&4_at_/'-T9&EO+F@^#0HC:6YC;'5D92 \<W1R:6YG+F@^#0HC:6YC
M;'5D92 \;V-I+F_at_^#0H-"B-D969I;F4_at_34%80T],4TE:10DT,# -"B-D969I
M;F4_at_34%84D]74PD)-3 P,_at_T*#0H-"FEN="!%<G)(86YD;&5R* ED=F]I9 D)
M*F5R<BP_at_#0H)"0D):6YT"0D):4AA;F1L951Y<&4I.PT*#0IM86EN*"D-"GLM"
_at_EI;G0)4V5R=F5R0V]N;F5C=" H"4]#245N=_at_D)*BIP<&A%;G8L#0H)"0D) M"0E/0TE397)V97()*BIP:%-R=BP-"_at_D)"0D)"4]#245R<F]R"2HJ<'!H17)R M;W(I.PT*#0H):6YT($5S=%-E<W,_at_* D)3T-)16YV"0DJ<&A%;G8L( T*"0D) M"0D)3T-)4V5R=F5R"2IP:%-R=BP_at_#0H)"0D)"0E/0TE%<G)O<@DJ<&A%<G(LM( T*"0D)"0D)3T-)4W9C0W1X"2HJ<'!H4V5R=FEC92P_at_#0H)"0D)"0E/0TE3 M97-S:6]N"2HJ<'!H4V5S<RP_at_#0H)"0D)"0E/0TE4<F%N<PDJ*G!P:%1R86YS M*3L-"_at_T*"6EN="!%>&5C4V5L"2@)"4]#245N=_at_D)*G!H16YV+" -"@D)"0D) M"4]#25-V8T-T> DJ<&A397)V:6-E+" -"_at_D)"0D)"4]#245R<F]R"2IP:$5R M<BP-"_at_D)"0D)"6-H87()"2IP<WI3<6Q3=&UT+" -"@D)"0D)"6-H87()"2IP M<WI+97E686QU92D[#0H-"_at_E/0TE3=F-#='@)*G!H4V5R=FEC93L-"@E/0TE3 M97-S:6]N"2IP:%-E<W-I;VX[#0H)3T-)5')A;G,)*G!H5')A;G,[#0H-"_at_E/ M0TE%;G8)"2IP:$5N=_at_D](# [#0H)3T-)4V5R=F5R"2IP:%-R=_at_D](# [#0H) M3T-)17)R;W()*G!H17)R"3T_at_,#L-"@T*"6EN= D)"7)C.PT*#0H)+RH_at_15-4 M04),25-(($A!3D1,15,_at_04Y$($-/3DY%0U0_at_5$\@5$A%(%-%4E9%4B J+PT* M#0H):68_at_*%-E<G9E<D-O;FYE8W0@*"9P:$5N=BP@)G!H4W)V+" F<&A%<G(I M(#T]($]#25]%4E)/4BD-"_at_D)<F5T=7)N($]#25]%4E)/4CL-"@T*"2\J($53 M5$%"3$E32"!44D%.4T%#5$E/3B!!($%.1"!%6$5#551%(%-4051%345.5" J M+PT*#0H):68_at_*')C(#T@*$5S=%-E<W,@*"!P:$5N=BP@<&A3<G8L('!H17)R M+" -"_at_D)"0D)"2 F<&A397)V:6-E+" -"@D)"0D)"2 F<&A397-S:6]N+ T* M"0D)"0D)("9P:%1R86YS*2DI#0H)>PT*"0EI9B H<F,_at_/3T@,2D-"@D)"45R M<DAA;F1L97(H*&1V;VED("HI('!H16YV+"!/0TE?2%194$5?14Y6*3L-"_at_D) M96QS90T*"0D)17)R2&%N9&QE<B_at_H9'9O:60@*BD@<&A%<G(L($]#25](5%E0
M15]%4E)/4BD[#0H)?0T*#0H)+RH_at_15A%0U5412!!(%-%3$5#5"!35$%414U% M3E0_at_*B\-"@T*"45X96-396P@*"!P:$5N=BP@<&A397)V:6-E+"!P:$5R<BP- M"_at_D)(E-%3$5#5"!K97DL(&QE;F=T:"P_at_9&%T82!&4D]-(%9/0R!72$5212!KM97D_at_/2 Z2T59(BP@(E1%4U1214,B*3L-"@D-"@ER971U<FX@,#L-"GT-"@T* M#0H-"FEN="!%>&5C4V5L("_at_)3T-)16YV"0DJ<&A%;G8L( T*"0D)"4]#25-V M8T-T> DJ<&A397)V:6-E+ T*"0D)"4]#245R<F]R"2IP:$5R<BP-"_at_D)"0EC M:&%R"0DJ<'-Z4W%L4W1M="P_at_#0H)"0D)8VAA<@D)*G!S>DME>59A;'5E*0T* M>PT*"4]#25!A<F%M"2IP:%-T;71087)A;2 ](# [#0H)3T-)1&5F:6YE"2IP M:$1E9FEN92 ](# [#0H)3T-)4W1M= D)*G!H4W1M=" ](# [#0H)3T-)0FEN
M9 D)*G!H0FEN9" ](# [#0H-"_at_EI;G0)"0EN4&%R86U#;G0[#0H-"B\J#0H) M8VAA<_at_D)='AT0V]L3F%M95LQ,#(T73L-"@EU8C()"0EN1&%T851Y<&4[#0H) M=6(R"0D);D1A=&%3:7IE.PT*"75B,_at_D)"6Y"=693:7IE.PT**B\-"@EU8C()M"0EN06-T4VEZ93L-"_at_T*"6-H87()"7-Z2V5Y6S,P,%T[#0H)8VAA<@D)<WI# M;V1E6S(P73L-"_at_EC:&%R"0ES>D1A=&%;,S(P,#!=.PT*#0H)<W=O<F0)"7-T M871U<SL-"_at_T*"2\J($535$%"3$E32"!35$%414U%3E0_at_2$%.1$Q%("HO#0HM" _at_EI9B H3T-)2&%N9&QE06QL;V,@*"AD=F]I9" J*2!P:$5N=BP@*&1V;VED M("HJ*2 F<&A3=&UT+ T*"0E/0TE?2%194$5?4U1-5"P_at_,"P@*&1V;VED("HJ M*2 P*2D-"_at_E[#0H)"45R<DAA;F1L97(H*&1V;VED("HI('!H16YV+"!/0TE? M2%194$5?14Y6*3L-"_at_D)<F5T=7)N($]#25]%4E)/4CL-"@E]#0H-"@DO*B!0 M4D50("8_at_15A%0U5412!35$%414U%3E0@*B\-"@T*"6EF("A/0TE3=&UT4')E M<&%R92AP:%-T;70L('!H17)R+" H=&5X=" J*2!P<WI3<6Q3=&UT+"!S=')L M96XH<'-Z4W%L4W1M="DL#0H)"0DH=6(T*2!/0TE?3E167U-93E1!6"P_at_*'5B M-"D_at_3T-)7T1%1D%53%0I*0T*"7L-"@D)17)R2&%N9&QE<B_at_H9'9O:60@*BD@ M<&A%<G(L($]#25](5%E015]%4E)/4BD[#0H)"7)E='5R;B!/0TE?15)23U([ M#0H)?0T*#0H)+RH_at_34%0($E.4%54(%!!4D%-151%4E,@*B\-"@T*"6EF("A/ M0TE":6YD0GE.86UE*'!H4W1M="P_at_)G!H0FEN9"P@<&A%<G(L("AT97AT("HI M("(Z2T59(BP-"B _at_(" @(" @(" @+3$L("AD=F]I9" J*2!P<WI+97E686QU
M92P_at_<W1R;&5N*'!S>DME>59A;'5E*2P@,2P@*&1V;VED("HI(# L#0H@(" @ M(" _at_(" @("AU8C(@*BD@,"P@*'5B,B J*2 P+" H=6(T*2 P+" H=6(T("HI M(# L($]#25]$149!54Q4*2D-"_at_E[#0H)"45R<DAA;F1L97(H*&1V;VED("HIM('!H17)R+"!/0TE?2%194$5?15)23U(I.PT*"0ER971U<FX_at_3T-)7T524D]2 M.PT*"7T-"_at_T*"2\J($U!4"!/5510550_at_1$%402!605)!24),15,@*B\-"@T* M"6EF("A/0TE$969I;F5">5!O<R H<&A3=&UT+" F<&A$969I;F4L('!H17)R M+" Q+ T*"0D)*&1V;VED("HI('-Z2V5Y+" S,# L(#$L#0H)"0DH9'9O:60_at_ M*BD_at_,"P@*'5B,B J*2 F;D%C=%-I>F4L("AU8C(@*BD@,"P@,"DI(" O+R!K M97D-"_at_E[#0H)"45R<DAA;F1L97(H*&1V;VED("HI('!H17)R+"!/0TE?2%19 M4$5?15)23U(I.PT*"0ER971U<FX_at_3T-)7T524D]2.PT*"7T-"@EI9B H3T-) M1&5F:6YE0GE0;W,_at_*'!H4W1M="P@)G!H1&5F:6YE+"!P:$5R<BP@,BP-"@D) M"2AD=F]I9" J*2!S>D-O9&4L(#$Q+" Q+ T*"0D)*&1V;VED("HI(# L("AU M8C(_at_*BD@)FY!8W13:7IE+" H=6(R("HI(# L(# I*0DO+R!C;V1E#0H)>PT* M"0E%<G)(86YD;&5R*"AD=F]I9" J*2!P:$5R<BP_at_3T-)7TA465!%7T524D]2 M*3L-"_at_D)<F5T=7)N($]#25]%4E)/4CL-"@E]#0H-"@EI9B H3T-)1&5F:6YE M0GE0;W,_at_*'!H4W1M="P@)G!H1&5F:6YE+"!P:$5R<BP@,RP-"@D)"2AD=F]I M9" J*2!S>D1A=&$L(" R,30W-#_at_S-C0W+" R-"P-"@D)"2AD=F]I9" J*2 P M+" H=6(R("HI("9N06-T4VEZ92P_at_*'5B,B J*2 P+"!/0TE?1%E.04U)0U]& M151#2"DI"2\O(&1A=&$-"_at_E[#0H)"45R<DAA;F1L97(H*&1V;VED("HI('!H M17)R+"!/0TE?2%194$5?15)23U(I.PT*"0ER971U<FX_at_3T-)7T524D]2.PT* M"7T-"_at_T*"2\J($5814-55$4_at_5$A%(%-13"!35$%414U%3E0@*B\-"@T*"6EF M("AS=&%T=7,_at_/2!/0TE3=&UT17AE8W5T92AP:%-E<G9I8V4L('!H4W1M="P@ M<&A%<G(L(# L(# L( T*"0DH0T].4U0_at_3T-)4VYA<'-H;W0@*BD@,"P@*$]# M25-N87!S:&]T("HI(# L("AU8C0I($]#25]$149!54Q4*2D-"_at_E[#0H)"45R M<DAA;F1L97(H*&1V;VED("HI('!H17)R+"!/0TE?2%194$5?15)23U(I.PT* M"0ER971U<FX_at_3T-)7T524D]2.PT*"7T-"@T*"2\J($1%5$5234E.12!42$4@ M05144DE"551%4R!/1B!#3TQ534X_at_24X_at_4T5,14-4+4Q)4U0@*B\-"@T*"6EF M("A/0TE!='1R1V5T("_at_H9'9O:60@*BD@<&A3=&UT+" H=6(T*2!/0TE?2%19 M4$5?4U1-5"P-"_at_D)"0D)*&1V;VED("HI("9N4&%R86U#;G0L("AU8C0@*BD@ M,"P_at_#0H)"0D)"2AU8C0I($]#25]!5%127U!!4D%-7T-/54Y4+"!P:$5R<BDI M#0H)>PT*"0E%<G)(86YD;&5R*"AD=F]I9" J*2!P:$5R<BP_at_3T-)7TA465!% M7T524D]2*3L-"_at_D)<F5T=7)N($]#25]%4E)/4CL-"@E]#0HO*_at_T*"69O<B H M:2 ](#$[(&D_at_/#T@;E!A<F%M0VYT.R!I*RLI#0H)>PT*"0EI9B H3T-)4&%R M86U'970)*"AD=F]I9" J*2!P:%-T;70L($]#25](5%E015]35$U4+"!P:$5R M<BP_at_#0H)"0DH9'9O:60@*BHI("9P:%-T;71087)A;2P@:2DI#0H)"7L-"@D) M"45R<DAA;F1L97(H*&1V;VED("HI('!H16YV+"!/0TE?2%194$5?14Y6*3LM" _at_D)"7)E='5R;B!/0TE?15)23U([#0H)"7T-"@T*"0EN0G5F4VEZ92 ]('-I
M>F5O9BAT>'1#;VQ.86UE*3L-"_at_T*"0EI9B H3T-)071T<D=E=" H*&1V;VED M("HI('!H4W1M=%!A<F%M+" -"_at_D)"0D)"2AU8C0I($]#25]$5%E015]005)! M32P-"_at_D)"0D)"2AD=F]I9" J*2!T>'1#;VQ.86UE+" -"@D)"0D)"2AU8C0@M*BD_at_)FY"=693:7IE+ T*"0D)"0D)*'5B-"D_at_3T-)7T%45%)?3D%-12P@#0H) M"0D)"0EP:$5R<BDI#0H)"0E%<G)(86YD;&5R*"AD=F]I9" J*2!P:$5R<BP_at_ M3T-)7TA465!%7T524D]2*3L-"_at_T*"0ET>'1#;VQ.86UE6VY"=693:7IE72 ] M(# [#0H-"_at_D):68@*$]#24%T=')'970@*"AD=F]I9" J*2!P:%-T;71087)A M;2P_at_*'5B-"D_at_3T-)7T1465!%7U!!4D%-+ T*"0D)"0DH=6(R("HI("9N1&%T M851Y<&4L("AU8C0_at_*BD@,"P@#0H)"0D)"2AU8C0I($]#25]!5%127T1!5$%? M5%E012P_at_<&A%<G(I*0T*"0D)17)R2&%N9&QE<B_at_H9'9O:60@*BD@<&A%<G(L M($]#25](5%E015]%4E)/4BD[#0H-"_at_D):68@*$]#24%T=')'970@*"AD=F]I M9" J*2!P:%-T;71087)A;2P_at_*'5B-"D_at_3T-)7T1465!%7U!!4D%-+ T*"0D)
M"0DH=6(R("HI("9N1&%T85-I>F4L("AU8C0_at_*BD@,"P@#0H)"0D)"2AU8C0I M($]#25]!5%127T1!5$%?4TE:12P_at_<&A%<G(I*0T*"0D)17)R2&%N9&QE<B_at_H M9'9O:60_at_*BD@<&A%<G(L($]#25](5%E015]%4E)/4BD[#0H)?0T**B\-"@T*M"6EF("AS=&%T=7,_at_/3T_at_3T-)7TY/7T1!5$$I(" @(" @(" @(" @(" O+R!& M971C:"!T:&4_at_<F5M86EN:6YG(&1A=&$@#0H)"2IS>D1A=&$@/2 P.PT*"65L M<V4_at_:68@*'-T871U<R ]/2!/0TE?15)23U(I#0H)"45R<DAA;F1L97(H*&1V M;VED("HI('!H17)R+"!/0TE?2%194$5?15)23U(I.PT*"65L<V4-"_at_E[#0H) M"6QO;F<)=&]T86QS:7IE(#T_at_,#L-"@D)=6(Q"0EN>' @/2!/0TE?1D540TA? M3D585#L-"_at_T*"0EW:&EL92 H("AS=&%T=7,@/2!/0TE3=&UT1F5T8V_at_H<&A3 M=&UT+"!P:$5R<BP_at_,2P@;GAP+"!/0TE?1$5&055,5"DI(#T]($]#25].145$ M7T1!5$$I#0H)"7L-"_at_D)"4]#241E9FEN90DJ<&A$968[#0H)"0EU8C0)"0EN
M2&%N9&QE5'EP93L-"_at_D)"75B,0D)"6Y$:7([#0H)"0EU8C0)"0EN4F]W3G5M M.PT*"0D)=6(T"0D);D%R<DED>#L-"_at_D)"75B,_at_D)"6Y20V]D93L-"@D)"75B M,0D)"6Y0:65C93L-"_at_D)"75B- D)"6Y,96X[#0H-"@D)"6EF("A/0TE3=&UT M1V5T4&EE8V5);F9O("_at_@#0H)"0D)"0D)"7!H4W1M="P@#0H)"0D)"0D)"7!HM17)R+" -"_at_D)"0D)"0D)*'9O:60@*BHI("9P:$1E9BP@#0H)"0D)"0D)"29N M2&%N9&QE5'EP92P_at_#0H)"0D)"0D)"29N1&ER+" -"@D)"0D)"0D))FY2;W=. M=6TL( T*"0D)"0D)"0DF;D%R<DED>"P_at_#0H)"0D)"0D)"29N4&EE8V4I*0T* M"0D)"45R<DAA;F1L97(H*&1V;VED("HI('!H17)R+"!/0TE?2%194$5?15)2 M3U(I.PT*#0H)"0EN3&5N(#T_at_<VEZ96]F*'-Z1&%T82D[#0H)"0EI9B H3T-)
M4W1M=%-E=%!I96-E26YF;R H#0H)"0D)"0D)"7!H1&5F+" -"_at_D)"0D)"0D) M;DAA;F1L951Y<&4L( T*"0D)"0D)"0EP:$5R<BP_at_#0H)"0D)"0D)"7-Z1&%T M82P_at_#0H)"0D)"0D)"29N3&5N+" -"@D)"0D)"0D);E!I96-E+" -"@D)"0D)M"0D)*'9O:60_at_*BD@,"P@#0H)"0D)"0D)"29N4D-O9&4I*0T*"0D)"45R<DAA M;F1L97(H*&1V;VED("HI('!H17)R+"!/0TE?2%194$5?15)23U(I.PT*#0H) M"0ET;W1A;'-I>F4_at_*ST@;DQE;CL-"@D)"7!R:6YT9B_at_B=&]T86P@<VEZ92 ] M("5D7&XB+"!T;W1A;'-I>F4I.PT*"0E]"2\O('=H:6QE('-T871U<R ]($]# M25].145$7T1!5$$-"_at_E]#0H-"@EI9B H<W1A='5S("$]($]#25]354-#15-3 M*0T*"0E%<G)(86YD;&5R*"AD=F]I9" J*2!P:$5R<BP_at_3T-)7TA465!%7T52 M4D]2*3L-"_at_T*"4]#24AA;F1L949R964H*&1V;VED("HI('!H4W1M="P_at_3T-) M7TA465!%7U-4350I.R _at_(" O*B!&<F5E(&AA;F1L97,@*B\-"@T*"7)E='5R M;B P.PT*?0T*#0H-"_at_T*:6YT($5S=%-E<W,H3T-)16YV("IP:$5N=BP_at_3T-) M4V5R=F5R("IP:%-R=BP_at_3T-)17)R;W(@*G!H17)R+"!/0TE3=F-#='@@*BIP M<&A397)V:6-E+" -"_at_D)"2!/0TE397-S:6]N("HJ<'!H4V5S<RP_at_3T-)5')A M;G,_at_*BIP<&A4<F%N<RD-"GL-"@EI9B H3T-)2&%N9&QE06QL;V,@*"AD=F]I M9" J*2!P:$5N=BP_at_*&1V;VED("HJ*2!P<&A397)V:6-E+" O+R!C<F5A=&4@ M<V5R=FEC92!H86YD;&4-"_at_D)"0D)"4]#25](5%E015]35D-#5%_at_L(# L("AD M=F]I9" J*BD_at_,"DI#0H)"7)E='5R;B Q.PT*"0T*"6EF("A/0TE!='1R4V5T M("_at_H9'9O:60@*BD@*G!P:%-E<G9I8V4L("AU8C0I($]#25](5%E015]35D-# M5%_at_L#0H)"0D)"2AD=F]I9" J*2!P:%-R=BP@*'5B-"D@,"P_at_3T-)7T%45%)? M4T525D52+"!P:$5R<BDI("\O('-E="!S97)V97(_at_8V]N=&5X= T*"0ER971U
M<FX_at_,CL-"@T*"6EF("A/0TE(86YD;&5!;&QO8R H*&1V;VED("HI('!H16YV M+" H9'9O:60_at_*BHI('!P:%-E<W,L#0H)"0D)"0E/0TE?2%194$5?4T534TE/ M3BP_at_,"P@*&1V;VED("HJ*2 P*2D-"@D)<F5T=7)N(#$[#0H-"@EI9B H3T-)M071T<E-E=" H*&1V;VED("HI("IP<&A397-S+"!/0TE?2%194$5?4T534TE/ M3BP_at_*&1V;VED("HI(")-22(L( T*"0D)"0DH=6(T*2!S=')L96XH(DU)(BDL M($]#25]!5%127U5315).04U%+"!P:$5R<BDI"2\O('-E="!U<V5R(&YA;64_at_ M871T<B!F;W(_at_<V5S<VEO;@T*"0ER971U<FX@,CL-"@T*"6EF("A/0TE!='1R M4V5T("_at_H9'9O:60@*BD@*G!P:%-E<W,L($]#25](5%E015]315-324].+" H M9'9O:60_at_*BD@(D=/(BP@*'5B-"D@<W1R;&5N*")'3R(I+" -"@D)"0D)3T-) M7T%45%)?4$%34U=/4D0L('!H17)R*2D)"0D)"0DO+R!S970_at_=7-E<B!P=V0@ M871T<B!F;W(_at_<V5S<VEO;@T*"0ER971U<FX@,CL-"@T*"6EF("A/0TE397-S M:6]N0F5G:6X_at_*"A/0TE3=F-#='@@*BD@*G!P:%-E<G9I8V4L('!H17)R+" J M<'!H4V5S<RP-"_at_D)"0D)"4]#25]#4D5$7U)$0DU3+"!/0TE?1$5&055,5"DI M#0H)"7)E='5R;B R.PT*#0H):68_at_*$]#24%T=')3970@*"AD=F]I9" J*2 J M<'!H4V5R=FEC92P_at_3T-)7TA465!%7U-60T-46"P-"@D)"0D)*&1V;VED("HI M("IP<&A397-S+" H=6(T*2 P+"!/0TE?05144E]315-324].+"!P:$5R<BDI M"2\O(&%S<V]C:6%T92!U<V5R('-E<W-I;VX_at_=VET:"!34E9#5%_at_-"@D)<F5T M=7)N(#([#0H-"_at_DO*B!%4U1!0DQ)4T@@5%)!3E-!0U1)3TX@*B\-"@T*"6EF M("A/0TE(86YD;&5!;&QO8R H*&1V;VED("HI('!H16YV+" H9'9O:60_at_*BHI M('!P:%1R86YS+ T*"0D)"0D)3T-)7TA465!%7U1204Y3+" P+" H9'9O:60_at_ M*BHI(# I*0T*"0ER971U<FX_at_,3L-"@T*"6EF("A/0TE!='1R4V5T("@H9'9O M:60_at_*BD@*G!P:%-E<G9I8V4L("AU8C0I($]#25](5%E015]35D-#5%_at_L#0H) M"0D)"2AD=F]I9" J*2 J<'!H5')A;G,L("AU8C0I(# L($]#25]!5%127U12 M04Y3+"!P:$5R<BDI("\O('-E="!S97)V97(_at_8V]N=&5X=" -"@D)<F5T=7)N M(#([#0H-"_at_EI9B H3T-)5')A;G-3=&%R="@J<'!H4V5R=FEC92P@<&A%<G(L M(# L($]#25]$149!54Q4*2D)+RH_at_4U1!4E0_at_3D57(%1204Y3("HO#0H)"7)E M='5R;B R.PT*#0H)<F5T=7)N(# [#0I]#0H-"_at_T*#0II;G0)4V5R=F5R0V]N M;F5C="_at_)3T-)16YV"0DJ*G!P:$5N=BP-"@D)"0D)3T-)4V5R=F5R"2HJ<'!H M4W)V+ T*"0D)"0E/0TE%<G)O<_at_DJ*G!P:$5R<BD-"GL-"@DO*B!)3DE424%, M25I%($]204-,12!/0TD_at_*B\-"@T*"6EF("A/0TE);FET:6%L:7IE(" @*"AU M8C0I($]#25]$149!54Q4+" H9'9O:60_at_*BD@,"P@#0H@(" @(" @(" @(" @ M(" _at_("AD=F]I9" J("@J*2 H9'9O:60@*BP@<VEZ95]T*2D@,"P@#0H)"0D) M("AD=F]I9" J("_at_J*2 H9'9O:60@*BP_at_9'9O:60@*BP@<VEZ95]T*2D@,"PM" _at_D)"0D@*'9O:60@*"HI("AD=F]I9" J+"!D=F]I9" J*2D@,"DI#0H)>PT* M"0EP<FEN=&8H(D524D]2.B!/0TE);FET:6%L:7IE*"E<;B(I.PT*"0ER971U M<FX_at_3T-)7T524D]2.PT*"7T-"@T*"2\J($535$%"3$E32"!%3E9)4D].345. M5"!&3U(_at_4D5-04E.24Y'($]#22!#04Q,4R J+PT*#0H):68@*$]#245N=DEN M:70H*$]#245N=B J*BD_at_<'!H16YV+"!/0TE?1$5&055,5"P@,"P@*&1V;VED M("HJ*2 P*2D_at_#0H)>PT*"0E%<G)(86YD;&5R*"IP<&A%;G8L($]#25](5%E0 M15]%3E8I.PT*"0ER971U<FX_at_3T-)7T524D]2.PT*"7T-"@T*"2\J($535$%" M3$E32"!'3$]"04P_at_15)23U(@2$%.1$Q%("HO#0H-"@EI9B H3T-)2&%N9&QE M06QL;V,_at_*"AD=F]I9" J*2 J<'!H16YV+" H9'9O:60@*BHI('!P:$5R<BP@ M+R\_at_8W)E871E(&%N(&5R<F]R(&AA;F1L90T*"0E/0TE?2%194$5?15)23U(L M(# L("AD=F]I9" J*BD_at_,"DI#0H)>PT*"0E%<G)(86YD;&5R*"IP<&A%;G8L M($]#25](5%E015]%3E8I.PT*"0ER971U<FX_at_3T-)7T524D]2.PT*"7T-"@T* M"2\J($%45$%#2"!43R!315)615(_at_*B\-"@T*"6EF("A/0TE(86YD;&5!;&QO M8R H*&1V;VED("HI("IP<&A%;G8L("AD=F]I9" J*BD_at_<'!H4W)V+ T*"0E/ M0TE?2%194$5?4T525D52+" P+" H9'9O:60_at_*BHI(# I*0T*"7L-"@D)17)R M2&%N9&QE<B_at_H9'9O:60@*BD@*G!P:$5N=BP_at_3T-)7TA465!%7T5.5BD[#0H) M"7)E='5R;B!/0TE?15)23U([#0H)?0T*#0H):68_at_*$]#25-E<G9E<D%T=&%C M:" H*G!P:%-R=BP_at_*G!P:$5R<BP@*'1E>'0@*BD@(D]203_at_B+ ES=')L96XH M(D]203_at_B*2P@*'5B-"D_at_3T-)7T1%1D%53%0I*0T*"7L-"@D)17)R2&%N9&QE M<B_at_H9'9O:60@*BD@*G!P:$5R<BP_at_3T-)7TA465!%7T524D]2*3L-"@D)<F5T M=7)N($]#25]%4E)/4CL-"_at_E]#0H-"@ER971U<FX@,#L-"GT-"@T*#0H-"FEN M="!%<G)(86YD;&5R*&1V;VED("H_at_<&A%<G)O<BP@:6YT(&E(86YD;&54>7!E M*0T*>PT*"71E>'0);7-G8G5F6S4Q,ET[#0H):6YT"0EE<G)C;V1E.PT*#0H) M:68_at_*&E(86YD;&54>7!E(#T]($]#25](5%E015]%4E)/4BD-"@E[#0H)"4]# M245R<F]R1V5T*"AD=F]I9" J*2!P:$5R<F]R+" H=6(T*2 Q+" H=&5X=" J M*2!.54Q,+" F97)R8V]D92P-"_at_D)"6US9V)U9BP@*'5B-"D@<VEZ96]F*&US M9V)U9BDL($]#25](5%E015]%4E)/4BD[#0H)?0T*"65L<V4-"_at_E[#0H)"4]# M245R<F]R1V5T*"AD=F]I9" J*2!P:$5R<F]R+" H=6(T*2 Q+" H=&5X=" J M*2!.54Q,+" F97)R8V]D92P-"_at_D)"6US9V)U9BP@*'5B-"D@<VEZ96]F*&US M9V)U9BDL($]#25](5%E015]%3E8I.PT*"7T-"_at_T*"7!R:6YT9B_at_B17)R;W(@ M8V]D93H_at_)60@+2 E+BIS7&XB+"!E<G)C;V1E+" U,3(L(&US9V)U9BD[#0H- 4"_at_ER971U<FX@,3L-"GT-"@T*#0H`
`
end Received on Wed Feb 26 2003 - 20:06:03 CET