From: <jul...@ya...> - 2002-05-15 21:37:58
|
Hi for all. I try to compile my code for GBC using this command line and a get this message. Command for compiling: lcc -Wa-l -Wa-p -c -o test.o test.c Messagem of return: /include: Not a directory /include: Not a directory lcc: C:\GBDK\bin/sdcpp: No error --------------------------------- Yahoo! Encontros O lugar certo para você encontrar aquela pessoa que falta na sua vida. Cadastre-se hoje mesmo! |
From: Michael H. <mic...@ju...> - 2002-05-16 15:19:44
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Julio. The most likely cause is that you've installed GBDK in a directory with a space in it. Try installing it somewhere else, and try running lcc with the '-v' option to see what is actually being run. - -- Michael On Wed, 15 May 2002, [iso-8859-1] Julio Lemos wrote: > > Hi for all. > > I try to compile my code for GBC using this command line and a get this m= essage. > > Command for compiling: > > lcc -Wa-l -Wa-p -c -o test.o test.c > > Messagem of return: > > /include: Not a directory > /include: Not a directory > lcc: C:\GBDK\bin/sdcpp: No error > > > > --------------------------------- > Yahoo! Encontros > O lugar certo para voc=EA encontrar aquela pessoa que falta na sua vida. = Cadastre-se hoje mesmo! -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.6 (OpenBSD) Comment: For info see http://www.gnupg.org iEYEARECAAYFAjzjzg0ACgkQ3L3H1ImjCiQ0MgCfWwfC+1Yaiapi6Pw5dl1K8g0U eNoAnA8/rmeEG/c+sLpT4FrmdMlQlzch =3Dd3wr -----END PGP SIGNATURE----- |
From: Fabien P. <fab...@re...> - 2002-05-16 16:39:02
|
Hi for all. Is there any news for a float support (* / + and -) in gbdk? I've tried to compile some basic float calc and print (from newlib), but it doesn't compile! Fabien If anynody could help, it works with other compilers (have tried with gcc). Just need these ones to make trigonometric calc with * and +. #include <stdio.h> /* the following deal with IEEE single-precision numbers */ #define EXCESS 126 #define SIGNBIT ((unsigned long)0x80000000) #define HIDDEN (unsigned long)(1 << 23) #define SIGN(fp) ((fp >> (8*sizeof(fp)-1)) & 1) #define EXP(fp) (((fp) >> 23) & (unsigned int) 0x00FF) #define MANT(fp) (((fp) & (unsigned long)0x007FFFFF) | HIDDEN) #define PACK(s,e,m) ((s) | ((e) << 23) | (m)) #define DEFAULT_FLOAT_PRECISION 6 union float_long { float f; long l; }; char output_ptr[256] ; int charsOutputted = 0; static void output_char( char c ) { output_ptr[charsOutputted++] = c; } static void output_float (float f, unsigned char reqWidth, signed char reqDecimals, unsigned char left, unsigned char zero, unsigned char sign, unsigned char space) { unsigned char minWidth, i; char negative=0; long integerPart; float decimalPart; char fpBuffer[128]; char fpBI=0, fpBD; volatile union float_long IntegerPart; volatile union float_long tmp; // save the sign if (f<0) { negative=1; f=-f; } // split the float integerPart = f; decimalPart = f - integerPart; // fill the buffer with the integerPart (in reversed order!) while (integerPart) { fpBuffer[fpBI++]='0' + integerPart%10; integerPart /= 10; } if (!fpBI) { // we need at least a 0 fpBuffer[fpBI++]='0'; } // display some decimals as default if (reqDecimals==-1) reqDecimals=DEFAULT_FLOAT_PRECISION; // fill buffer with the decimalPart (in normal order) fpBD=fpBI; if (i=reqDecimals ) { // that's an assignment do { decimalPart *= 10.0; // truncate the float integerPart=decimalPart; fpBuffer[fpBD++]='0' + integerPart; decimalPart-=integerPart; } while (--i); } minWidth=fpBI; // we need at least these minWidth+=reqDecimals?reqDecimals+1:0; // maybe these if (negative || sign || space) minWidth++; // and maybe even this :) if (!left && reqWidth>i) { if (zero) { if (negative) output_char('-'); else if (sign) output_char('+'); else if (space) output_char(' '); while (reqWidth-->minWidth) output_char ('0'); } else { while (reqWidth-->minWidth) output_char (' '); if (negative) output_char('-'); else if (sign) output_char('+'); else if (space) output_char (' '); } } else { if (negative) output_char('-'); else if (sign) output_char('+'); else if (space) output_char(' '); } // output the integer part i=fpBI-1; do { output_char (fpBuffer[i]); } while (i--); // ouput the decimal part if (reqDecimals) { output_char ('.'); i=fpBI; while (reqDecimals--) output_char (fpBuffer[i++]); } if (left && reqWidth>minWidth) { while (reqWidth-->minWidth) output_char(' '); } } /* multiply two floats */ float fmul (float a1, float a2) { volatile union float_long fl1, fl2; volatile unsigned long result; volatile int exp; char sign; fl1.f = a1; fl2.f = a2; if (!fl1.l || !fl2.l) return (0); // compute sign and exponent sign = SIGN (fl1.l) ^ SIGN (fl2.l); exp = EXP (fl1.l) - EXCESS; exp += EXP (fl2.l); fl1.l = MANT (fl1.l); fl2.l = MANT (fl2.l); // the multiply is done as one 16x16 multiply and two 16x8 multiples result = (fl1.l >> 8) * (fl2.l >> 8); result += ((fl1.l & (unsigned long) 0xFF) * (fl2.l >> 8)) >> 8; result += ((fl2.l & (unsigned long) 0xFF) * (fl1.l >> 8)) >> 8; if (result & (unsigned long)0x80000000) { // round result += 0x80; result >>= 8; } else { // round result += 0x40; result >>= 7; exp--; } result &= ~HIDDEN; // pack up and go home fl1.l = PACK (sign ? ((unsigned long) 0x80000000) : 0 , (unsigned long)exp, result); return (fl1.f); } float Sin(float a, float b) { return fmul(a,b); } main() { float a = 018.01; float b = 0.002; float c; c = Sin(a,b); output_float (c, 0, -1, 0, 0, 0, 0); printf("%s", output_ptr); } |
From: Fabien P. <fab...@re...> - 2002-05-16 16:43:46
|
sorry for the wrong subject of the previous post : Hi for all. Is there any news for a float support (* / + and -) in gbdk? I've tried to compile some basic float calc and print (from newlib), but it doesn't compile! Fabien If anynody could help, it works with other compilers (have tried with gcc). Just need these ones to make trigonometric calc with * and +. #include <stdio.h> /* the following deal with IEEE single-precision numbers */ #define EXCESS 126 #define SIGNBIT ((unsigned long)0x80000000) #define HIDDEN (unsigned long)(1 << 23) #define SIGN(fp) ((fp >> (8*sizeof(fp)-1)) & 1) #define EXP(fp) (((fp) >> 23) & (unsigned int) 0x00FF) #define MANT(fp) (((fp) & (unsigned long)0x007FFFFF) | HIDDEN) #define PACK(s,e,m) ((s) | ((e) << 23) | (m)) #define DEFAULT_FLOAT_PRECISION 6 union float_long { float f; long l; }; char output_ptr[256] ; int charsOutputted = 0; static void output_char( char c ) { output_ptr[charsOutputted++] = c; } static void output_float (float f, unsigned char reqWidth, signed char reqDecimals, unsigned char left, unsigned char zero, unsigned char sign, unsigned char space) { unsigned char minWidth, i; char negative=0; long integerPart; float decimalPart; char fpBuffer[128]; char fpBI=0, fpBD; volatile union float_long IntegerPart; volatile union float_long tmp; // save the sign if (f<0) { negative=1; f=-f; } // split the float integerPart = f; decimalPart = f - integerPart; // fill the buffer with the integerPart (in reversed order!) while (integerPart) { fpBuffer[fpBI++]='0' + integerPart%10; integerPart /= 10; } if (!fpBI) { // we need at least a 0 fpBuffer[fpBI++]='0'; } // display some decimals as default if (reqDecimals==-1) reqDecimals=DEFAULT_FLOAT_PRECISION; // fill buffer with the decimalPart (in normal order) fpBD=fpBI; if (i=reqDecimals ) { // that's an assignment do { decimalPart *= 10.0; // truncate the float integerPart=decimalPart; fpBuffer[fpBD++]='0' + integerPart; decimalPart-=integerPart; } while (--i); } minWidth=fpBI; // we need at least these minWidth+=reqDecimals?reqDecimals+1:0; // maybe these if (negative || sign || space) minWidth++; // and maybe even this :) if (!left && reqWidth>i) { if (zero) { if (negative) output_char('-'); else if (sign) output_char('+'); else if (space) output_char(' '); while (reqWidth-->minWidth) output_char ('0'); } else { while (reqWidth-->minWidth) output_char (' '); if (negative) output_char('-'); else if (sign) output_char('+'); else if (space) output_char (' '); } } else { if (negative) output_char('-'); else if (sign) output_char('+'); else if (space) output_char(' '); } // output the integer part i=fpBI-1; do { output_char (fpBuffer[i]); } while (i--); // ouput the decimal part if (reqDecimals) { output_char ('.'); i=fpBI; while (reqDecimals--) output_char (fpBuffer[i++]); } if (left && reqWidth>minWidth) { while (reqWidth-->minWidth) output_char(' '); } } /* multiply two floats */ float fmul (float a1, float a2) { volatile union float_long fl1, fl2; volatile unsigned long result; volatile int exp; char sign; fl1.f = a1; fl2.f = a2; if (!fl1.l || !fl2.l) return (0); // compute sign and exponent sign = SIGN (fl1.l) ^ SIGN (fl2.l); exp = EXP (fl1.l) - EXCESS; exp += EXP (fl2.l); fl1.l = MANT (fl1.l); fl2.l = MANT (fl2.l); // the multiply is done as one 16x16 multiply and two 16x8 multiples result = (fl1.l >> 8) * (fl2.l >> 8); result += ((fl1.l & (unsigned long) 0xFF) * (fl2.l >> 8)) >> 8; result += ((fl2.l & (unsigned long) 0xFF) * (fl1.l >> 8)) >> 8; if (result & (unsigned long)0x80000000) { // round result += 0x80; result >>= 8; } else { // round result += 0x40; result >>= 7; exp--; } result &= ~HIDDEN; // pack up and go home fl1.l = PACK (sign ? ((unsigned long) 0x80000000) : 0 , (unsigned long)exp, result); return (fl1.f); } float Sin(float a, float b) { return fmul(a,b); } main() { float a = 018.01; float b = 0.002; float c; c = Sin(a,b); output_float (c, 0, -1, 0, 0, 0, 0); printf("%s", output_ptr); } |
From: Michael H. <mic...@ju...> - 2002-05-16 22:17:19
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Fabien. I've found the problem but haven't yet fixed it. gbdk is missing the float support libraries from sdcc, which is why the sdcc regression tests pass but your code with gbdk doesn't. To investigate yourself, download the latest version of sdcc from cvs and look at the device/lib/_fsgt.c etc libraries. I'm afraid I can't promise when I can look at it. - -- Michael On Thu, 16 May 2002, Fabien Poirier wrote: > Hi for all. > > Is there any news for a float support (* / + and -) in gbdk? > > I've tried to compile some basic float calc and print (from newlib), but it doesn't compile! > > Fabien > > If anynody could help, it works with other compilers (have tried with gcc). > Just need these ones to make trigonometric calc with * and +. > > > > #include <stdio.h> > > /* the following deal with IEEE single-precision numbers */ > #define EXCESS 126 > #define SIGNBIT ((unsigned long)0x80000000) > #define HIDDEN (unsigned long)(1 << 23) > #define SIGN(fp) ((fp >> (8*sizeof(fp)-1)) & 1) > #define EXP(fp) (((fp) >> 23) & (unsigned int) 0x00FF) > #define MANT(fp) (((fp) & (unsigned long)0x007FFFFF) | HIDDEN) > #define PACK(s,e,m) ((s) | ((e) << 23) | (m)) > > #define DEFAULT_FLOAT_PRECISION 6 > > union float_long { > float f; > long l; > }; > > char output_ptr[256] ; > int charsOutputted = 0; > > static void output_char( char c ) > { > output_ptr[charsOutputted++] = c; > } > > > static void output_float (float f, unsigned char reqWidth, > signed char reqDecimals, > unsigned char left, unsigned char zero, unsigned char sign, unsigned char space) > { > unsigned char minWidth, i; > char negative=0; > long integerPart; > float decimalPart; > char fpBuffer[128]; > char fpBI=0, fpBD; > volatile union float_long IntegerPart; > volatile union float_long tmp; > > > // save the sign > if (f<0) { > negative=1; > f=-f; > } > > // split the float > integerPart = f; > decimalPart = f - integerPart; > > // fill the buffer with the integerPart (in reversed order!) > while (integerPart) { > fpBuffer[fpBI++]='0' + integerPart%10; > integerPart /= 10; > } > > if (!fpBI) { > // we need at least a 0 > fpBuffer[fpBI++]='0'; > } > > // display some decimals as default > if (reqDecimals==-1) > reqDecimals=DEFAULT_FLOAT_PRECISION; > > // fill buffer with the decimalPart (in normal order) > fpBD=fpBI; > if (i=reqDecimals ) { // that's an assignment > do { > decimalPart *= 10.0; > // truncate the float > integerPart=decimalPart; > fpBuffer[fpBD++]='0' + integerPart; > decimalPart-=integerPart; > } while (--i); > } > > minWidth=fpBI; // we need at least these > minWidth+=reqDecimals?reqDecimals+1:0; // maybe these > if (negative || sign || space) > minWidth++; // and maybe even this :) > > if (!left && reqWidth>i) { > if (zero) { > if (negative) output_char('-'); > else if (sign) output_char('+'); > else if (space) output_char(' '); > while (reqWidth-->minWidth) > output_char ('0'); > } else { > while (reqWidth-->minWidth) > output_char (' '); > if (negative) output_char('-'); > else if (sign) output_char('+'); > else if (space) output_char (' '); > } > } else { > if (negative) output_char('-'); > else if (sign) output_char('+'); > else if (space) output_char(' '); > } > > // output the integer part > i=fpBI-1; > do { > output_char (fpBuffer[i]); > } while (i--); > > // ouput the decimal part > if (reqDecimals) { > output_char ('.'); > i=fpBI; > while (reqDecimals--) > output_char (fpBuffer[i++]); > } > > if (left && reqWidth>minWidth) { > while (reqWidth-->minWidth) > output_char(' '); > } > > } > > > /* multiply two floats */ > float fmul (float a1, float a2) > { > volatile union float_long fl1, fl2; > volatile unsigned long result; > volatile int exp; > char sign; > > fl1.f = a1; > fl2.f = a2; > > if (!fl1.l || !fl2.l) > return (0); > > // compute sign and exponent > sign = SIGN (fl1.l) ^ SIGN (fl2.l); > exp = EXP (fl1.l) - EXCESS; > exp += EXP (fl2.l); > > fl1.l = MANT (fl1.l); > fl2.l = MANT (fl2.l); > > // the multiply is done as one 16x16 multiply and two 16x8 multiples > result = (fl1.l >> 8) * (fl2.l >> 8); > result += ((fl1.l & (unsigned long) 0xFF) * (fl2.l >> 8)) >> 8; > result += ((fl2.l & (unsigned long) 0xFF) * (fl1.l >> 8)) >> 8; > > if (result & (unsigned long)0x80000000) { > // round > result += 0x80; > result >>= 8; > } > else { > // round > result += 0x40; > result >>= 7; > exp--; > } > > result &= ~HIDDEN; > > // pack up and go home > fl1.l = PACK (sign ? ((unsigned long) 0x80000000) : 0 , (unsigned long)exp, result); > > return (fl1.f); > } > > float Sin(float a, float b) > { > return fmul(a,b); > } > > main() > { > float a = 018.01; > float b = 0.002; > float c; > c = Sin(a,b); > output_float (c, 0, -1, 0, 0, 0, 0); > printf("%s", output_ptr); > } > > _______________________________________________________________ > > Have big pipes? SourceForge.net is looking for download mirrors. We supply > the hardware. You get the recognition. Email Us: ban...@so... > _______________________________________________ > gbdk-users mailing list > gbd...@li... > https://lists.sourceforge.net/lists/listinfo/gbdk-users > -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.6 (OpenBSD) Comment: For info see http://www.gnupg.org iEYEARECAAYFAjzkL+oACgkQ3L3H1ImjCiQTLwCfX1V9fTzUnHs104J5QvcmeeZN QH4AoJNqIICydwtFCywLzO7LF6G+fKx9 =p8Cd -----END PGP SIGNATURE----- |
From: Fabien P. <fab...@re...> - 2002-06-03 15:32:29
|
Hi all, A friend and I (I'd rather be honest, he's done much of the effort), have= made some modifications to support floats with gbdk. First we have build a single file with all the stuff from sdcc (device/li= b/_fsgt.c etc). After a deeper look inside the compiler, it seem's there were some proble= ms with the floats as it was done in gbdk. We have fixed them, now we are at the point were we are trying to put all= the libs in gbdk-libs to have a native support of floats within gbdk. - How should we give back our sources to contribute to gbdk in the easies= t way (i.e to have them incorporated as fast as possible), it should be b= etter if somebody can control that these modifications/evolution are done the right way (never have touch a compil= er before) I'd like to thank Michael Hope for his help. Please, excuse my poor english. I don't know if it's the right place for such a message, I don't know if = there is other lists much more appropriate for this message, if it's the = case, could you please tell me. I forward this message to the guy (Armel Langlet) who's done much of the = work and to the mailing list of our project that will use this feature of= gbdk. Regards Fabien Poirier Michael Hope a =E9crit : > = > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > = > Hi Fabien. I've found the problem but haven't yet fixed it. gbdk is > missing the float support libraries from sdcc, which is why the sdcc > regression tests pass but your code with gbdk doesn't. To investigate > yourself, download the latest version of sdcc from cvs and look at the > device/lib/_fsgt.c etc libraries. I'm afraid I can't promise when I ca= n > look at it. > = > - -- Michael > = > On Thu, 16 May 2002, Fabien Poirier wrote: > = > > Hi for all. > > > > Is there any news for a float support (* / + and -) in gbdk? > > > > I've tried to compile some basic float calc and print (from newlib), = but it doesn't compile! > > > > Fabien > > > > If anynody could help, it works with other compilers (have tried with= gcc). > > Just need these ones to make trigonometric calc with * and +. > > > > > > > > #include <stdio.h> > > > > /* the following deal with IEEE single-precision numbers */ > > #define EXCESS 126 > > #define SIGNBIT ((unsigned long)0x80000000) > > #define HIDDEN (unsigned long)(1 << 23) > > #define SIGN(fp) ((fp >> (8*sizeof(fp)-1)) & 1) > > #define EXP(fp) (((fp) >> 23) & (unsigned int) 0x00FF) > > #define MANT(fp) (((fp) & (unsigned long)0x007FFFFF) | HIDDEN) > > #define PACK(s,e,m) ((s) | ((e) << 23) | (m)) > > > > #define DEFAULT_FLOAT_PRECISION 6 > > > > union float_long { > > float f; > > long l; > > }; > > > > char output_ptr[256] ; > > int charsOutputted =3D 0; > > > > static void output_char( char c ) > > { > > output_ptr[charsOutputted++] =3D c; > > } > > > > > > static void output_float (float f, unsigned char reqWidth, > > signed char reqDecimals, > > unsigned char left, unsigned char zero, unsig= ned char sign, unsigned char space) > > { > > unsigned char minWidth, i; > > char negative=3D0; > > long integerPart; > > float decimalPart; > > char fpBuffer[128]; > > char fpBI=3D0, fpBD; > > volatile union float_long IntegerPart; > > volatile union float_long tmp; > > > > > > // save the sign > > if (f<0) { > > negative=3D1; > > f=3D-f; > > } > > > > // split the float > > integerPart =3D f; > > decimalPart =3D f - integerPart; > > > > // fill the buffer with the integerPart (in reversed order!) > > while (integerPart) { > > fpBuffer[fpBI++]=3D'0' + integerPart%10; > > integerPart /=3D 10; > > } > > > > if (!fpBI) { > > // we need at least a 0 > > fpBuffer[fpBI++]=3D'0'; > > } > > > > // display some decimals as default > > if (reqDecimals=3D=3D-1) > > reqDecimals=3DDEFAULT_FLOAT_PRECISION; > > > > // fill buffer with the decimalPart (in normal order) > > fpBD=3DfpBI; > > if (i=3DreqDecimals ) { // that's an assignment > > do { > > decimalPart *=3D 10.0; > > // truncate the float > > integerPart=3DdecimalPart; > > fpBuffer[fpBD++]=3D'0' + integerPart; > > decimalPart-=3DintegerPart; > > } while (--i); > > } > > > > minWidth=3DfpBI; // we need at least these > > minWidth+=3DreqDecimals?reqDecimals+1:0; // maybe these > > if (negative || sign || space) > > minWidth++; // and maybe even this :) > > > > if (!left && reqWidth>i) { > > if (zero) { > > if (negative) output_char('-'); > > else if (sign) output_char('+'); > > else if (space) output_char(' '); > > while (reqWidth-->minWidth) > > output_char ('0'); > > } else { > > while (reqWidth-->minWidth) > > output_char (' '); > > if (negative) output_char('-'); > > else if (sign) output_char('+'); > > else if (space) output_char (' '); > > } > > } else { > > if (negative) output_char('-'); > > else if (sign) output_char('+'); > > else if (space) output_char(' '); > > } > > > > // output the integer part > > i=3DfpBI-1; > > do { > > output_char (fpBuffer[i]); > > } while (i--); > > > > // ouput the decimal part > > if (reqDecimals) { > > output_char ('.'); > > i=3DfpBI; > > while (reqDecimals--) > > output_char (fpBuffer[i++]); > > } > > > > if (left && reqWidth>minWidth) { > > while (reqWidth-->minWidth) > > output_char(' '); > > } > > > > } > > > > > > /* multiply two floats */ > > float fmul (float a1, float a2) > > { > > volatile union float_long fl1, fl2; > > volatile unsigned long result; > > volatile int exp; > > char sign; > > > > fl1.f =3D a1; > > fl2.f =3D a2; > > > > if (!fl1.l || !fl2.l) > > return (0); > > > > // compute sign and exponent > > sign =3D SIGN (fl1.l) ^ SIGN (fl2.l); > > exp =3D EXP (fl1.l) - EXCESS; > > exp +=3D EXP (fl2.l); > > > > fl1.l =3D MANT (fl1.l); > > fl2.l =3D MANT (fl2.l); > > > > // the multiply is done as one 16x16 multiply and two 16x8 multiple= s > > result =3D (fl1.l >> 8) * (fl2.l >> 8); > > result +=3D ((fl1.l & (unsigned long) 0xFF) * (fl2.l >> 8)) >> 8; > > result +=3D ((fl2.l & (unsigned long) 0xFF) * (fl1.l >> 8)) >> 8; > > > > if (result & (unsigned long)0x80000000) { > > // round > > result +=3D 0x80; > > result >>=3D 8; > > } > > else { > > // round > > result +=3D 0x40; > > result >>=3D 7; > > exp--; > > } > > > > result &=3D ~HIDDEN; > > > > // pack up and go home > > fl1.l =3D PACK (sign ? ((unsigned long) 0x80000000) : 0 , (unsigned= long)exp, result); > > > > return (fl1.f); > > } > > > > float Sin(float a, float b) > > { > > return fmul(a,b); > > } > > > > main() > > { > > float a =3D 018.01; > > float b =3D 0.002; > > float c; > > c =3D Sin(a,b); > > output_float (c, 0, -1, 0, 0, 0, 0); > > printf("%s", output_ptr); > > } > > > > _______________________________________________________________ > > > > Have big pipes? SourceForge.net is looking for download mirrors. We s= upply > > the hardware. You get the recognition. Email Us: bandwidth@sourceforg= e.net > > _______________________________________________ > > gbdk-users mailing list > > gbd...@li... > > https://lists.sourceforge.net/lists/listinfo/gbdk-users > > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.0.6 (OpenBSD) > Comment: For info see http://www.gnupg.org > = > iEYEARECAAYFAjzkL+oACgkQ3L3H1ImjCiQTLwCfX1V9fTzUnHs104J5QvcmeeZN > QH4AoJNqIICydwtFCywLzO7LF6G+fKx9 > =3Dp8Cd > -----END PGP SIGNATURE----- |