Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Aug 2012 07:14:28 +1000 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Stephen Montgomery-Smith <stephen@missouri.edu>
Cc:        freebsd-numerics@FreeBSD.org, Bruce Evans <brde@optusnet.com.au>
Subject:   Re: Complex arg-trig functions
Message-ID:  <20120814055931.Q4897@besplex.bde.org>
In-Reply-To: <50295887.2010608@missouri.edu>
References:  <5017111E.6060003@missouri.edu> <501C361D.4010807@missouri.edu> <20120804165555.X1231@besplex.bde.org> <501D51D7.1020101@missouri.edu> <20120805030609.R3101@besplex.bde.org> <501D9C36.2040207@missouri.edu> <20120805175106.X3574@besplex.bde.org> <501EC015.3000808@missouri.edu> <20120805191954.GA50379@troutmask.apl.washington.edu> <20120807205725.GA10572@server.rulingia.com> <20120809025220.N4114@besplex.bde.org> <5027F07E.9060409@missouri.edu> <20120814003614.H3692@besplex.bde.org> <50295887.2010608@missouri.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--0-286592833-1344892468=:4897
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed

On Mon, 13 Aug 2012, Stephen Montgomery-Smith wrote:

> On 08/13/2012 11:57 AM, Bruce Evans wrote:
>
>> I finally tested a version of this.  I only did simple comparisons (float
>> vs double and double vs long double).  The results look promising after
>> fixing a few bugs:
>
> Thank you very much for doing the testing, and for fixing the bugs.
>
>> 
>> % amd64 float prec, on 2**12 * 2**12 args:
>
>> % icacosh:max_er = 0x3690000000 436.5000, avg_er = 0.317, #>=1:0.5 =
>> 29104:255732
>
>> There are negative reasons to have the float versions unless they are not
>> wrappers.  The reasons to have non-wrappers are to test the algorithm and
>> run faster.
>
> That large max-err for the imaginary part of icacosh for float bothers me. 
> It means that I haven't thought it through properly.  Could you send me the 
> input values that created this error(s)?

It was just a bug in my test program, for scaling denormals.  Some cases
have an infinite-precision result that is very close to the smallest
denormal.  When this is rounded imperfectly to 0, implementation details
give a special case.  I had just fixed this for +0, but forget to mask
out the sign bit for testing -0.  Somehow this didn't turn up for other
functions.

> The float versions really are much harder than the double and long-double 
> versions.  And it just doesn't seem worth the effort, because who uses them 
> when the double versions are available?

I doubt that they are really harder.

> In my case, not for speed.  Because on my machine the float versions are 
> slightly slower than the double version.

The double constants might do that on amd64.  'r *= 0.5F;' would compile
to a single multiplication, where r and 0.5F are already in registers.
'r *= 0.5;' would compile to: convert r to double; multiply; convert
back to float.  Conversions are slower than multiplications.  On Phenom,
double <-> float conversion has a latency of 7 (?) cycles, while
multiplication has a latency of 4 cycles; both have a throughput of
1 instruction/cycle.  Sometimes latencies can be hidden, but here there
are 3 dependent operations.

> Also, you made the comment that in the float version, all the 0.5 should 
> become 0.5F.  Two questions:
> 1.  Doesn't the compiler do this conversion for me?
> 2.  What is wrong with using x/2 instead of 0.5*x?  You told me in a far 
> earlier email to use 0.5*x.  (Similarly in one place I have a 0.25.)

1. It can't, since x * 0.5F is quite different from x * 0.5 when x is
    float and float expressions are evaluated in float precision.  The
    former is a float expression, and for example overflows when x =
    FLT_MAX.  The latter is a double expression, so it doesn't overflow
    when x = FLT_MAX.  Maybe the compiler could optimize it to a float
    expression if its result is immediately assigned to a float variable
    or cast to float, but this is not a very easy optimization -- the
    compiler would have to prove that it has the right side effects for
    all possible values of x.  The side effect of overflow happens on
    assignment.

2. Division tends to be slow, and is slow on x86.  On Phenom, division
    has a latency of 20 cycles and a throughput of 1 per 15 cycles in
    scalar double precision (17 in vector[2] double precision).  Maybe
    the compiler can optimize division by a power of 2 to a multiplication
    though.

In fact, gcc on x86 does both of these optimizations.  With float x,
and double y, in a function returning float, 'return x/2.0;' gets
turned into float multiplication by 0.5F, but 'y = x/2.0; return y;'
only have the division optimization (it converts x to double, multiplies
doubles, stores to y, and converts to float).

So all of those '* 0.5[F]'s can be turned back into '/ 2's (no need to
depend on the optimization by writing 2.0).

Optimization of [long] double constants to float (or double) constants
is more routine.  When you write 'static const long double one = 1;',
gcc normally puts a long double at the address of `one' (this is visible
to debuggers), but never actually uses it it uses either fld1 on i387
or an unnamed float constant with the same value.  At least on i387;
loading a float constant automatically extends it and is much faster
than loading an (already-extended) long double constant; however, on
amd64 a float constant would have to be converted to double for use
in double expressions.

I added old complex functions to the simple test run.  See the attachment
for the full list.

% amd64 float prec, on 2**12 x 2**12 args:
% % ...
% rctan: max_er = 0x9708bb4b 4.7198, avg_er = 0.104, #>=1:0.5 = 177976:980356
% rctanh:max_er = 0x9c7f786c 4.8906, avg_er = 0.159, #>=1:0.5 = 635992:2189748
% ...
% ictan: max_er = 0x9c7f786c 4.8906, avg_er = 0.159, #>=1:0.5 = 635992:2189748
% ictanh:max_er = 0x9708bb4b 4.7198, avg_er = 0.104, #>=1:0.5 = 177976:980356

All (amd64 float prec) below 4 ulps except these.  Have to check my
denormal scaling again.

% amd64 double prec, on 2**12 x 2**12 args:
% ...
% rcatan:max_er = 0x8000000000000000 4503599627370496.0000, avg_er = 268435456.212, #>=1:0.5 = 4681:81365
% rcatanh:max_er = 0x8000000000000000 4503599627370496.0000, avg_er = 268435456.047, #>=1:0.5 = 428997:691341
% ...
% icatan:max_er = 0x8000000000000000 4503599627370496.0000, avg_er = 268435456.047, #>=1:0.5 = 428997:691341
% icatanh:max_er = 0x8000000000000000 4503599627370496.0000, avg_er = 268435456.212, #>=1:0.5 = 4681:81365
% ...
% icsqrt:max_er = 0x8000000000000000 4503599627370496.0000, avg_er = 268435456.476, #>=1:0.5 = 14279:7662849

This was tracked to a known annoying difference between SSE and i387
on NaNs.  x+y clears the sign buit on i387 but not on SSE.  SSE is
correct.

% i386 float prec, on 2**12 x 2**12 args:
% ...
% rcatan:max_er = 0x3c4078ec 1.8829, avg_er = 0.284, #>=1:0.5 = 13260:190836
% rcatanh:max_er = 0x2cef3171 1.4042, avg_er = 0.167, #>=1:0.5 = 4096:420916

i386 is generally more accurate.  *atan* now below 4 ulps.

% rccos: max_er = 0xb7f10439f3111686 24688206287.5958, avg_er = 1415.000, #>=1:0.5 = 3881364:4046644
% rccosh:max_er = 0xb7f10439f3111686 24688206287.5958, avg_er = 1415.000, #>=1:0.5 = 3881364:4046644
% rcexp: max_er = 0xb7e10439f3111686 24679817679.5958, avg_er = 312.908, #>=1:0.5 = 3884684:4078258
% rcsin: max_er = 0xb80bf11b402ee934 24702322906.0057, avg_er = 807.518, #>=1:0.5 = 3841652:4115524
% rcsinh:max_er = 0xb7f10439f3111686 24688206287.5958, avg_er = 1693.508, #>=1:0.5 = 3880876:4368000
% rctan: max_er = 0xb68d1b1c5151fcc0 24501606626.5413, avg_er = 1627.536, #>=1:0.5 = 3890932:4214696
% rctanh:max_er = 0x125ead9c2ea875d 154097358.0911, avg_er = 1416.635, #>=1:0.5 = 2897540:3523200
% ...
% iccos: max_er = 0xb80bf11b402ee934 24702322906.0057, avg_er = 1477.124, #>=1:0.5 = 3824832:4420052
% iccosh:max_er = 0xb80bf11b402ee934 24702322906.0057, avg_er = 1477.124, #>=1:0.5 = 3824832:4420052
% icexp: max_er = 0xb7fbf11b402ee934 24693934298.0057, avg_er = 1736.298, #>=1:0.5 = 3839256:4219864
% icsin: max_er = 0xb7f10439f3111686 24688206287.5958, avg_er = 1693.508, #>=1:0.5 = 3880876:4368000
% icsinh:max_er = 0xb80bf11b402ee934 24702322906.0057, avg_er = 807.518, #>=1:0.5 = 3841652:4115524
% ictan: max_er = 0x125ead9c2ea875d 154097358.0911, avg_er = 1416.635, #>=1:0.5 = 2897540:3523200
% ictanh:max_er = 0xb68d1b1c5151fcc0 24501606626.5413, avg_er = 1632.536, #>=1:0.5 = 3890988:4214752

i387 hardware trig functions are very inaccurate.

% sparc64 double prec, on 2**12 x 2**12 args:
% rcacos:max_er =     0x36b5 3.4192, avg_er = 0.228, #>=1:0.5 = 2394:125984
% rcacosh:max_er =     0x1f15 1.9426, avg_er = 0.258, #>=1:0.5 = 8464:2737832
% rcasin:max_er =     0x2b8c 2.7217, avg_er = 0.113, #>=1:0.5 = 33296:99148
% rcasinh:max_er =     0x1f15 1.9426, avg_er = 0.258, #>=1:0.5 = 8464:2737800
% rcatan:max_er =     0x2c46 2.7671, avg_er = 0.212, #>=1:0.5 = 4680:81364
% rcatanh:max_er =     0x2970 2.5898, avg_er = 0.047, #>=1:0.5 = 129452:691356
% rclog: max_er =      0xe09 0.8772, avg_er = 0.250, #>=1:0.5 = 0:18348

Everything seemed to be passing on sparc64, but it is 300 to 1000 times
slower on long doubles, so not many tests completed.

Bruce
--0-286592833-1344892468=:4897
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=complex-errtab
Content-Transfer-Encoding: BASE64
Content-ID: <20120814071428.M4897@besplex.bde.org>
Content-Description: 
Content-Disposition: attachment; filename=complex-errtab

YW1kNjQgZmxvYXQgcHJlYywgb24gMioqMTIgeCAyKioxMiBhcmdzOg0KcmNh
Y29zOm1heF9lciA9IDB4NTg0NjA4NDEgMi43NTg1LCBhdmdfZXIgPSAwLjMx
NywgIz49MTowLjUgPSAyOTA4NDoyNTU3MTINCnJjYWNvc2g6bWF4X2VyID0g
MHg1ZTFlNDVlNiAyLjk0MTIsIGF2Z19lciA9IDAuMjYyLCAjPj0xOjAuNSA9
IDg1ODY4OjM0MTM2ODQNCnJjYXNpbjptYXhfZXIgPSAweDYzMWI4MTgzIDMu
MDk3MSwgYXZnX2VyID0gMC4yMDksICM+PTE6MC41ID0gMzgzODg6MzgyNTA4
DQpyY2FzaW5oOm1heF9lciA9IDB4NWUxZTQ1ZTYgMi45NDEyLCBhdmdfZXIg
PSAwLjI2MiwgIz49MTowLjUgPSA4NTg2ODozNDEzNjg0DQpyY2F0YW46bWF4
X2VyID0gMHg1MWQ3YzQ3YSAyLjU1NzYsIGF2Z19lciA9IDAuMjkwLCAjPj0x
OjAuNSA9IDUyOTg0OjMxODA4NA0KcmNhdGFuaDptYXhfZXIgPSAweDczNDI0
ZDUyIDMuNjAxOCwgYXZnX2VyID0gMC4yMDUsICM+PTE6MC41ID0gMjEyNDI0
OjE0Mzc1ODANCnJjbG9nOiBtYXhfZXIgPSAweDI2ZGZhZTRkIDEuMjE0OCwg
YXZnX2VyID0gMC4yNDcsICM+PTE6MC41ID0gMTg0OjkyMjQ0DQpyY3NxcnQ6
bWF4X2VyID0gIDB4ZmZmZmFmMCAwLjUwMDAsIGF2Z19lciA9IDAuMjkyLCAj
Pj0xOjAuNSA9IDA6MA0KcmNjb3M6IG1heF9lciA9IDB4NTMzMzUxYmEgMi42
MDAwLCBhdmdfZXIgPSAwLjA4OCwgIz49MTowLjUgPSA1ODkzMjozMTIwODgN
CnJjY29zaDptYXhfZXIgPSAweDUzMzM1MWJhIDIuNjAwMCwgYXZnX2VyID0g
MC4wODgsICM+PTE6MC41ID0gNTg5MzI6MzEyMDg4DQpyY2V4cDogbWF4X2Vy
ID0gMHg0MmJmMzdlNSAyLjA4NTgsIGF2Z19lciA9IDAuMDk2LCAjPj0xOjAu
NSA9IDU5MDc2OjQ0MzkwNA0KcmNzaW46IG1heF9lciA9IDB4NTIyMGUwNGIg
Mi41NjY1LCBhdmdfZXIgPSAwLjA5NSwgIz49MTowLjUgPSA4NDU2NDo0Njg0
ODANCnJjc2luaDptYXhfZXIgPSAweDQ1YmFkY2U4IDIuMTc5MSwgYXZnX2Vy
ID0gMC4xMDcsICM+PTE6MC41ID0gNjQyMjA6MTIwODQ2NA0KcmN0YW46IG1h
eF9lciA9IDB4OTcwOGJiNGIgNC43MTk4LCBhdmdfZXIgPSAwLjEwNCwgIz49
MTowLjUgPSAxNzc5NzY6OTgwMzU2DQpyY3Rhbmg6bWF4X2VyID0gMHg5Yzdm
Nzg2YyA0Ljg5MDYsIGF2Z19lciA9IDAuMTU5LCAjPj0xOjAuNSA9IDYzNTk5
MjoyMTg5NzQ4DQppY2Fjb3M6bWF4X2VyID0gMHg1ZTFlNDVlNiAyLjk0MTIs
IGF2Z19lciA9IDAuMjYyLCAjPj0xOjAuNSA9IDg1ODY4OjM0MTM2ODQNCmlj
YWNvc2g6bWF4X2VyID0gMHg1ODQ2MDg0MSAyLjc1ODUsIGF2Z19lciA9IDAu
MzE3LCAjPj0xOjAuNSA9IDI5MDg0OjI1NTcxMg0KaWNhc2luOm1heF9lciA9
IDB4NWUxZTQ1ZTYgMi45NDEyLCBhdmdfZXIgPSAwLjI2MiwgIz49MTowLjUg
PSA4NTg2ODozNDEzNjg0DQppY2FzaW5oOm1heF9lciA9IDB4NjMxYjgxODMg
My4wOTcxLCBhdmdfZXIgPSAwLjIwOSwgIz49MTowLjUgPSAzODM4ODozODI1
MDgNCmljYXRhbjptYXhfZXIgPSAweDczNDI0ZDUyIDMuNjAxOCwgYXZnX2Vy
ID0gMC4yMDUsICM+PTE6MC41ID0gMjEyNDI0OjE0Mzc1ODANCmljYXRhbmg6
bWF4X2VyID0gMHg1MWQ3YzQ3YSAyLjU1NzYsIGF2Z19lciA9IDAuMjkwLCAj
Pj0xOjAuNSA9IDUyOTg0OjMxODA4NA0KaWNsb2c6IG1heF9lciA9IDB4MWZj
MmI0ZjUgMC45OTI1LCBhdmdfZXIgPSAwLjMwMiwgIz49MTowLjUgPSAwOjM0
OTgzMA0KaWNzcXJ0Om1heF9lciA9ICAweGZmZmZhZjAgMC41MDAwLCBhdmdf
ZXIgPSAwLjI5MiwgIz49MTowLjUgPSAwOjANCmljY29zOiBtYXhfZXIgPSAw
eDQ2ZDU2ZTZiIDIuMjEzNiwgYXZnX2VyID0gMC4xMzksICM+PTE6MC41ID0g
ODM2MDA6MTM1NzIwNA0KaWNjb3NoOm1heF9lciA9IDB4NDZkNTZlNmIgMi4y
MTM2LCBhdmdfZXIgPSAwLjEzOSwgIz49MTowLjUgPSA4MzYwMDoxMzU3MjA0
DQppY2V4cDogbWF4X2VyID0gMHgzZmQxZThkZSAxLjk5NDQsIGF2Z19lciA9
IDAuMTA0LCAjPj0xOjAuNSA9IDgwNzM4OjY1MDY2MA0KaWNzaW46IG1heF9l
ciA9IDB4NDViYWRjZTggMi4xNzkxLCBhdmdfZXIgPSAwLjEwNywgIz49MTow
LjUgPSA2NDIyMDoxMjA4NDY0DQppY3Npbmg6bWF4X2VyID0gMHg1MjIwZTA0
YiAyLjU2NjUsIGF2Z19lciA9IDAuMDk1LCAjPj0xOjAuNSA9IDg0NTY0OjQ2
ODQ4MA0KaWN0YW46IG1heF9lciA9IDB4OWM3Zjc4NmMgNC44OTA2LCBhdmdf
ZXIgPSAwLjE1OSwgIz49MTowLjUgPSA2MzU5OTI6MjE4OTc0OA0KaWN0YW5o
Om1heF9lciA9IDB4OTcwOGJiNGIgNC43MTk4LCBhdmdfZXIgPSAwLjEwNCwg
Iz49MTowLjUgPSAxNzc5NzY6OTgwMzU2DQoNCmFtZDY0IGRvdWJsZSBwcmVj
LCBvbiAyKioxMiB4IDIqKjEyIGFyZ3M6DQpyY2Fjb3M6bWF4X2VyID0gICAg
IDB4MWI1YSAzLjQxODksIGF2Z19lciA9IDAuMjI4LCAjPj0xOjAuNSA9IDIz
OTQ6MTI1OTg4DQpyY2Fjb3NoOm1heF9lciA9ICAgICAgMHhmN2QgMS45MzYw
LCBhdmdfZXIgPSAwLjI1NywgIz49MTowLjUgPSA2MTI6Mjc0MTg2MA0KcmNh
c2luOm1heF9lciA9ICAgICAweDE1YzUgMi43MjEyLCBhdmdfZXIgPSAwLjEx
MywgIz49MTowLjUgPSAzMzI5Njo5OTE1Mg0KcmNhc2luaDptYXhfZXIgPSAg
ICAgIDB4ZjdkIDEuOTM2MCwgYXZnX2VyID0gMC4yNTcsICM+PTE6MC41ID0g
NjEyOjI3NDE3OTYNCnJjYXRhbjptYXhfZXIgPSAweDgwMDAwMDAwMDAwMDAw
MDAgNDUwMzU5OTYyNzM3MDQ5Ni4wMDAwLCBhdmdfZXIgPSAyNjg0MzU0NTYu
MjEyLCAjPj0xOjAuNSA9IDQ2ODE6ODEzNjUNCnJjYXRhbmg6bWF4X2VyID0g
MHg4MDAwMDAwMDAwMDAwMDAwIDQ1MDM1OTk2MjczNzA0OTYuMDAwMCwgYXZn
X2VyID0gMjY4NDM1NDU2LjA0NywgIz49MTowLjUgPSA0Mjg5OTc6NjkxMzQx
DQpyY2xvZzogbWF4X2VyID0gICAgICAweDcwNCAwLjg3NzAsIGF2Z19lciA9
IDAuMjUwLCAjPj0xOjAuNSA9IDA6MjAxNTINCnJjc3FydDptYXhfZXIgPSAg
ICAweDExNTk0IDM0LjY5NzMsIGF2Z19lciA9IDAuNDc2LCAjPj0xOjAuNSA9
IDEyMjMyOjc2NjA4MDINCmljYWNvczptYXhfZXIgPSAgICAgIDB4ZjdkIDEu
OTM2MCwgYXZnX2VyID0gMC4yNTcsICM+PTE6MC41ID0gNjEyOjI3NDE4NjAN
CmljYWNvc2g6bWF4X2VyID0gICAgIDB4MWI1YSAzLjQxODksIGF2Z19lciA9
IDAuMjI4LCAjPj0xOjAuNSA9IDIzOTQ6MTI1OTg4DQppY2FzaW46bWF4X2Vy
ID0gICAgICAweGY3ZCAxLjkzNjAsIGF2Z19lciA9IDAuMjU3LCAjPj0xOjAu
NSA9IDYxMjoyNzQxNzk2DQppY2FzaW5oOm1heF9lciA9ICAgICAweDE1YzUg
Mi43MjEyLCBhdmdfZXIgPSAwLjExMywgIz49MTowLjUgPSAzMzI5Njo5OTE1
Mg0KaWNhdGFuOm1heF9lciA9IDB4ODAwMDAwMDAwMDAwMDAwMCA0NTAzNTk5
NjI3MzcwNDk2LjAwMDAsIGF2Z19lciA9IDI2ODQzNTQ1Ni4wNDcsICM+PTE6
MC41ID0gNDI4OTk3OjY5MTM0MQ0KaWNhdGFuaDptYXhfZXIgPSAweDgwMDAw
MDAwMDAwMDAwMDAgNDUwMzU5OTYyNzM3MDQ5Ni4wMDAwLCBhdmdfZXIgPSAy
Njg0MzU0NTYuMjEyLCAjPj0xOjAuNSA9IDQ2ODE6ODEzNjUNCmljbG9nOiBt
YXhfZXIgPSAgICAgIDB4NmY0IDAuODY5MSwgYXZnX2VyID0gMC4yMTMsICM+
PTE6MC41ID0gMDoxODEwMzINCmljc3FydDptYXhfZXIgPSAweDgwMDAwMDAw
MDAwMDAwMDAgNDUwMzU5OTYyNzM3MDQ5Ni4wMDAwLCBhdmdfZXIgPSAyNjg0
MzU0NTYuNDc2LCAjPj0xOjAuNSA9IDE0Mjc5Ojc2NjI4NDkNCg0KaTM4NiBm
bG9hdCBwcmVjLCBvbiAyKioxMiB4IDIqKjEyIGFyZ3M6DQpyY2Fjb3M6bWF4
X2VyID0gMHg0MmNkMTljNiAyLjA4NzUsIGF2Z19lciA9IDAuMzE0LCAjPj0x
OjAuNSA9IDM4NTQ6MjE1MTE2DQpyY2Fjb3NoOm1heF9lciA9IDB4MzE3MGUy
MzIgMS41NDUwLCBhdmdfZXIgPSAwLjI1NCwgIz49MTowLjUgPSAyMzAwODoz
MjQ1MDI4DQpyY2FzaW46bWF4X2VyID0gMHg1NWFkYzBkZiAyLjY3NzUsIGF2
Z19lciA9IDAuMjA4LCAjPj0xOjAuNSA9IDM0MzA0OjM1Mzk4MA0KcmNhc2lu
aDptYXhfZXIgPSAweDMxNzBlMjMyIDEuNTQ1MCwgYXZnX2VyID0gMC4yNTQs
ICM+PTE6MC41ID0gMjMwMDg6MzI0NTAyOA0KcmNhdGFuOm1heF9lciA9IDB4
M2M0MDc4ZWMgMS44ODI5LCBhdmdfZXIgPSAwLjI4NCwgIz49MTowLjUgPSAx
MzI2MDoxOTA4MzYNCnJjYXRhbmg6bWF4X2VyID0gMHgyY2VmMzE3MSAxLjQw
NDIsIGF2Z19lciA9IDAuMTY3LCAjPj0xOjAuNSA9IDQwOTY6NDIwOTE2DQpy
Y2xvZzogbWF4X2VyID0gMHgyNTgzMDg1MyAxLjE3MjIsIGF2Z19lciA9IDAu
MjQ2LCAjPj0xOjAuNSA9IDEyMDoyNDg5Mg0KcmNzcXJ0Om1heF9lciA9ICAw
eGZmZmZhZjAgMC41MDAwLCBhdmdfZXIgPSAwLjI5MiwgIz49MTowLjUgPSAw
OjANCnJjY29zOiBtYXhfZXIgPSAweGI3ZjEwNDM5ZjMxMTE2ODYgMjQ2ODgy
MDYyODcuNTk1OCwgYXZnX2VyID0gMTQxNS4wMDAsICM+PTE6MC41ID0gMzg4
MTM2NDo0MDQ2NjQ0DQpyY2Nvc2g6bWF4X2VyID0gMHhiN2YxMDQzOWYzMTEx
Njg2IDI0Njg4MjA2Mjg3LjU5NTgsIGF2Z19lciA9IDE0MTUuMDAwLCAjPj0x
OjAuNSA9IDM4ODEzNjQ6NDA0NjY0NA0KcmNleHA6IG1heF9lciA9IDB4Yjdl
MTA0MzlmMzExMTY4NiAyNDY3OTgxNzY3OS41OTU4LCBhdmdfZXIgPSAzMTIu
OTA4LCAjPj0xOjAuNSA9IDM4ODQ2ODQ6NDA3ODI1OA0KcmNzaW46IG1heF9l
ciA9IDB4YjgwYmYxMWI0MDJlZTkzNCAyNDcwMjMyMjkwNi4wMDU3LCBhdmdf
ZXIgPSA4MDcuNTE4LCAjPj0xOjAuNSA9IDM4NDE2NTI6NDExNTUyNA0KcmNz
aW5oOm1heF9lciA9IDB4YjdmMTA0MzlmMzExMTY4NiAyNDY4ODIwNjI4Ny41
OTU4LCBhdmdfZXIgPSAxNjkzLjUwOCwgIz49MTowLjUgPSAzODgwODc2OjQz
NjgwMDANCnJjdGFuOiBtYXhfZXIgPSAweGI2OGQxYjFjNTE1MWZjYzAgMjQ1
MDE2MDY2MjYuNTQxMywgYXZnX2VyID0gMTYyNy41MzYsICM+PTE6MC41ID0g
Mzg5MDkzMjo0MjE0Njk2DQpyY3Rhbmg6bWF4X2VyID0gMHgxMjVlYWQ5YzJl
YTg3NWQgMTU0MDk3MzU4LjA5MTEsIGF2Z19lciA9IDE0MTYuNjM1LCAjPj0x
OjAuNSA9IDI4OTc1NDA6MzUyMzIwMA0KaWNhY29zOm1heF9lciA9IDB4MzE3
MGUyMzIgMS41NDUwLCBhdmdfZXIgPSAwLjI1NCwgIz49MTowLjUgPSAyMzAw
ODozMjQ1MDI4DQppY2Fjb3NoOm1heF9lciA9IDB4NDJjZDE5YzYgMi4wODc1
LCBhdmdfZXIgPSAwLjMxNCwgIz49MTowLjUgPSAzODU0OjIxNTExNg0KaWNh
c2luOm1heF9lciA9IDB4MzE3MGUyMzIgMS41NDUwLCBhdmdfZXIgPSAwLjI1
NCwgIz49MTowLjUgPSAyMzAwODozMjQ1MDI4DQppY2FzaW5oOm1heF9lciA9
IDB4NTVhZGMwZGYgMi42Nzc1LCBhdmdfZXIgPSAwLjIwOCwgIz49MTowLjUg
PSAzNDMwNDozNTM5ODANCmljYXRhbjptYXhfZXIgPSAweDJjZWYzMTcxIDEu
NDA0MiwgYXZnX2VyID0gMC4xNjcsICM+PTE6MC41ID0gNDA5Njo0MjA5MTYN
CmljYXRhbmg6bWF4X2VyID0gMHgzYzQwNzhlYyAxLjg4MjksIGF2Z19lciA9
IDAuMjg0LCAjPj0xOjAuNSA9IDEzMjYwOjE5MDgzNg0KaWNsb2c6IG1heF9l
ciA9IDB4MWZjMmI0ZjUgMC45OTI1LCBhdmdfZXIgPSAwLjMwMiwgIz49MTow
LjUgPSAwOjMzODcxMg0KaWNzcXJ0Om1heF9lciA9ICAweGZmZmZhZjAgMC41
MDAwLCBhdmdfZXIgPSAwLjI5MiwgIz49MTowLjUgPSAwOjANCmljY29zOiBt
YXhfZXIgPSAweGI4MGJmMTFiNDAyZWU5MzQgMjQ3MDIzMjI5MDYuMDA1Nywg
YXZnX2VyID0gMTQ3Ny4xMjQsICM+PTE6MC41ID0gMzgyNDgzMjo0NDIwMDUy
DQppY2Nvc2g6bWF4X2VyID0gMHhiODBiZjExYjQwMmVlOTM0IDI0NzAyMzIy
OTA2LjAwNTcsIGF2Z19lciA9IDE0NzcuMTI0LCAjPj0xOjAuNSA9IDM4MjQ4
MzI6NDQyMDA1Mg0KaWNleHA6IG1heF9lciA9IDB4YjdmYmYxMWI0MDJlZTkz
NCAyNDY5MzkzNDI5OC4wMDU3LCBhdmdfZXIgPSAxNzM2LjI5OCwgIz49MTow
LjUgPSAzODM5MjU2OjQyMTk4NjQNCmljc2luOiBtYXhfZXIgPSAweGI3ZjEw
NDM5ZjMxMTE2ODYgMjQ2ODgyMDYyODcuNTk1OCwgYXZnX2VyID0gMTY5My41
MDgsICM+PTE6MC41ID0gMzg4MDg3Njo0MzY4MDAwDQppY3Npbmg6bWF4X2Vy
ID0gMHhiODBiZjExYjQwMmVlOTM0IDI0NzAyMzIyOTA2LjAwNTcsIGF2Z19l
ciA9IDgwNy41MTgsICM+PTE6MC41ID0gMzg0MTY1Mjo0MTE1NTI0DQppY3Rh
bjogbWF4X2VyID0gMHgxMjVlYWQ5YzJlYTg3NWQgMTU0MDk3MzU4LjA5MTEs
IGF2Z19lciA9IDE0MTYuNjM1LCAjPj0xOjAuNSA9IDI4OTc1NDA6MzUyMzIw
MA0KaWN0YW5oOm1heF9lciA9IDB4YjY4ZDFiMWM1MTUxZmNjMCAyNDUwMTYw
NjYyNi41NDEzLCBhdmdfZXIgPSAxNjMyLjUzNiwgIz49MTowLjUgPSAzODkw
OTg4OjQyMTQ3NTINCg0KaTM4NiBkb3VibGUgcHJlYywgb24gMioqMTIgeCAy
KioxMiBhcmdzOg0KcmNhY29zOm1heF9lciA9ICAgICAweDExZTggMi4yMzgz
LCBhdmdfZXIgPSAwLjE2NSwgIz49MTowLjUgPSAyNDg6MTExODUwDQpyY2Fj
b3NoOm1heF9lciA9ICAgICAgMHhiMDIgMS4zNzYwLCBhdmdfZXIgPSAwLjI1
NiwgIz49MTowLjUgPSAxMDQ6MjcxNTMxMg0KcmNhc2luOm1heF9lciA9ICAg
ICAweDEzY2UgMi40NzU2LCBhdmdfZXIgPSAwLjExMiwgIz49MTowLjUgPSA1
NjE2Ojk1MDYwDQpyY2FzaW5oOm1heF9lciA9ICAgICAgMHhiMDIgMS4zNzYw
LCBhdmdfZXIgPSAwLjI1NiwgIz49MTowLjUgPSAxMDQ6MjcxNTMxMg0KcmNh
dGFuOm1heF9lciA9ICAgICAgMHg5ZWQgMS4yNDA3LCBhdmdfZXIgPSAwLjAx
NSwgIz49MTowLjUgPSA0MDg0OjQ4OTIwDQpyY2F0YW5oOm1heF9lciA9ICAg
ICAgMHhiMTcgMS4zODYyLCBhdmdfZXIgPSAwLjAxNCwgIz49MTowLjUgPSA1
Njo3NzQ1Ng0KcmNsb2c6IG1heF9lciA9ICAgICAgMHg3MDQgMC44NzcwLCBh
dmdfZXIgPSAwLjI1MCwgIz49MTowLjUgPSAwOjIwMTEyDQpyY3NxcnQ6bWF4
X2VyID0gICAgICAweDdhYSAwLjk1ODAsIGF2Z19lciA9IDAuMzk5LCAjPj0x
OjAuNSA9IDA6NDEwNA0KaWNhY29zOm1heF9lciA9ICAgICAgMHhiMDIgMS4z
NzYwLCBhdmdfZXIgPSAwLjI1NiwgIz49MTowLjUgPSAxMDQ6MjcxNTMxMg0K
aWNhY29zaDptYXhfZXIgPSAgICAgMHgxMWU4IDIuMjM4MywgYXZnX2VyID0g
MC4xNjUsICM+PTE6MC41ID0gMjQ4OjExMTg1MA0KaWNhc2luOm1heF9lciA9
ICAgICAgMHhiMDIgMS4zNzYwLCBhdmdfZXIgPSAwLjI1NiwgIz49MTowLjUg
PSAxMDQ6MjcxNTMxMg0KaWNhc2luaDptYXhfZXIgPSAgICAgMHgxM2NlIDIu
NDc1NiwgYXZnX2VyID0gMC4xMTIsICM+PTE6MC41ID0gNTYxNjo5NTA2MA0K
aWNhdGFuOm1heF9lciA9ICAgICAgMHhiMTcgMS4zODYyLCBhdmdfZXIgPSAw
LjAxNCwgIz49MTowLjUgPSA1Njo3NzQ1Ng0KaWNhdGFuaDptYXhfZXIgPSAg
ICAgIDB4OWVkIDEuMjQwNywgYXZnX2VyID0gMC4wMTUsICM+PTE6MC41ID0g
NDA4NDo0ODkyMA0KaWNsb2c6IG1heF9lciA9ICAgICAgMHg2ZjQgMC44Njkx
LCBhdmdfZXIgPSAwLjIxMywgIz49MTowLjUgPSAwOjE4MTAzMg0KaWNzcXJ0
Om1heF9lciA9ICAgICAgMHg0MDAgMC41MDAwLCBhdmdfZXIgPSAwLjM5OSwg
Iz49MTowLjUgPSAwOjQwMjYNCg0Kc3BhcmM2NCBkb3VibGUgcHJlYywgb24g
MioqMTIgeCAyKioxMiBhcmdzOg0KcmNhY29zOm1heF9lciA9ICAgICAweDM2
YjUgMy40MTkyLCBhdmdfZXIgPSAwLjIyOCwgIz49MTowLjUgPSAyMzk0OjEy
NTk4NA0KcmNhY29zaDptYXhfZXIgPSAgICAgMHgxZjE1IDEuOTQyNiwgYXZn
X2VyID0gMC4yNTgsICM+PTE6MC41ID0gODQ2NDoyNzM3ODMyDQpyY2FzaW46
bWF4X2VyID0gICAgIDB4MmI4YyAyLjcyMTcsIGF2Z19lciA9IDAuMTEzLCAj
Pj0xOjAuNSA9IDMzMjk2Ojk5MTQ4DQpyY2FzaW5oOm1heF9lciA9ICAgICAw
eDFmMTUgMS45NDI2LCBhdmdfZXIgPSAwLjI1OCwgIz49MTowLjUgPSA4NDY0
OjI3Mzc4MDANCnJjYXRhbjptYXhfZXIgPSAgICAgMHgyYzQ2IDIuNzY3MSwg
YXZnX2VyID0gMC4yMTIsICM+PTE6MC41ID0gNDY4MDo4MTM2NA0KcmNhdGFu
aDptYXhfZXIgPSAgICAgMHgyOTcwIDIuNTg5OCwgYXZnX2VyID0gMC4wNDcs
ICM+PTE6MC41ID0gMTI5NDUyOjY5MTM1Ng0KcmNsb2c6IG1heF9lciA9ICAg
ICAgMHhlMDkgMC44NzcyLCBhdmdfZXIgPSAwLjI1MCwgIz49MTowLjUgPSAw
OjE4MzQ4DQo=

--0-286592833-1344892468=:4897--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120814055931.Q4897>