]> rtime.felk.cvut.cz Git - opencv.git/blob - opencv/src/cvaux/cvhog.cpp
fixed HOG detector
[opencv.git] / opencv / src / cvaux / cvhog.cpp
1 /*M///////////////////////////////////////////////////////////////////////////////////////
2 //
3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4 //
5 //  By downloading, copying, installing or using the software you agree to this license.
6 //  If you do not agree to this license, do not download, install,
7 //  copy or use the software.
8 //
9 //
10 //                           License Agreement
11 //                For Open Source Computer Vision Library
12 //
13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
14 // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
15 // Third party copyrights are property of their respective owners.
16 //
17 // Redistribution and use in source and binary forms, with or without modification,
18 // are permitted provided that the following conditions are met:
19 //
20 //   * Redistribution's of source code must retain the above copyright notice,
21 //     this list of conditions and the following disclaimer.
22 //
23 //   * Redistribution's in binary form must reproduce the above copyright notice,
24 //     this list of conditions and the following disclaimer in the documentation
25 //     and/or other materials provided with the distribution.
26 //
27 //   * The name of the copyright holders may not be used to endorse or promote products
28 //     derived from this software without specific prior written permission.
29 //
30 // This software is provided by the copyright holders and contributors "as is" and
31 // any express or implied warranties, including, but not limited to, the implied
32 // warranties of merchantability and fitness for a particular purpose are disclaimed.
33 // In no event shall the Intel Corporation or contributors be liable for any direct,
34 // indirect, incidental, special, exemplary, or consequential damages
35 // (including, but not limited to, procurement of substitute goods or services;
36 // loss of use, data, or profits; or business interruption) however caused
37 // and on any theory of liability, whether in contract, strict liability,
38 // or tort (including negligence or otherwise) arising in any way out of
39 // the use of this software, even if advised of the possibility of such damage.
40 //
41 //M*/
42
43 #include "_cvaux.h"
44 #include <iterator>
45
46 /****************************************************************************************\
47       The code below is implementation of HOG (Histogram-of-Oriented Gradients)
48       descriptor and object detection, introduced by Navneet Dalal and Bill Triggs.
49
50       The computed feature vectors are compatible with the
51       INRIA Object Detection and Localization Toolkit
52       (http://pascal.inrialpes.fr/soft/olt/)
53 \****************************************************************************************/
54
55 namespace cv
56 {
57
58 size_t HOGDescriptor::getDescriptorSize() const
59 {
60     CV_Assert(blockSize.width % cellSize.width == 0 &&
61         blockSize.height % cellSize.height == 0);
62     CV_Assert((winSize.width - blockSize.width) % blockStride.width == 0 &&
63         (winSize.height - blockSize.height) % blockStride.height == 0 );
64     return (size_t)nbins*
65         (blockSize.width/cellSize.width)*
66         (blockSize.height/cellSize.height)*
67         ((winSize.width - blockSize.width)/blockStride.width + 1)*
68         ((winSize.height - blockSize.height)/blockStride.height + 1);
69 }
70
71 double HOGDescriptor::getWinSigma() const
72 {
73     return winSigma >= 0 ? winSigma : (blockSize.width + blockSize.height)/8.;
74 }
75
76 bool HOGDescriptor::checkDetectorSize() const
77 {
78     size_t detectorSize = svmDetector.size(), descriptorSize = getDescriptorSize();
79     return detectorSize == 0 ||
80         detectorSize == descriptorSize ||
81         detectorSize == descriptorSize + 1;
82 }
83
84 void HOGDescriptor::setSVMDetector(const vector<float>& _svmDetector)
85 {
86     svmDetector = _svmDetector;
87     CV_Assert( checkDetectorSize() );
88 }
89
90 bool HOGDescriptor::load(const String& filename, const String& objname)
91 {
92     FileStorage fs(filename, FileStorage::READ);
93     FileNode obj = !objname.empty() ? fs[objname] : fs.getFirstTopLevelNode();
94     if( !obj.isMap() )
95         return false;
96     FileNodeIterator it = obj["winSize"].begin();
97     it >> winSize.width >> winSize.height;
98     it = obj["blockSize"].begin();
99     it >> blockSize.width >> blockSize.height;
100     it = obj["blockStride"].begin();
101     it >> blockStride.width >> blockStride.height;
102     it = obj["cellSize"].begin();
103     it >> cellSize.width >> cellSize.height;
104     obj["nbins"] >> nbins;
105     obj["derivAperture"] >> derivAperture;
106     obj["winSigma"] >> winSigma;
107     obj["histogramNormType"] >> histogramNormType;
108     obj["L2HysThreshold"] >> L2HysThreshold;
109     obj["gammaCorrection"] >> gammaCorrection;
110
111     FileNode vecNode = obj["SVMDetector"];
112     if( vecNode.isSeq() )
113     {
114         vecNode >> svmDetector;
115         CV_Assert(checkDetectorSize());
116     }
117     return true;
118 }
119
120 void HOGDescriptor::save(const String& filename, const String& objName) const
121 {
122     FileStorage fs(filename, FileStorage::WRITE);
123     fs << (!objName.empty() ? objName : FileStorage::getDefaultObjectName(filename)) << "{";
124
125     fs  << "winSize" << winSize
126         << "blockSize" << blockSize
127         << "blockStride" << blockStride
128         << "cellSize" << cellSize
129         << "nbins" << nbins
130         << "derivAperture" << derivAperture
131         << "winSigma" << getWinSigma()
132         << "histogramNormType" << histogramNormType
133         << "L2HysThreshold" << L2HysThreshold
134         << "gammaCorrection" << gammaCorrection;
135     if( !svmDetector.empty() )
136         fs << "SVMDetector" << "[:" << svmDetector << "]";
137     fs << "}";
138 }
139
140 void HOGDescriptor::computeGradient(const Mat& img, Mat& grad, Mat& qangle,
141                                     Size paddingTL, Size paddingBR) const
142 {
143     CV_Assert( img.type() == CV_8U || img.type() == CV_8UC3 );
144     
145     Size gradsize(img.cols + paddingTL.width + paddingBR.width,
146                   img.rows + paddingTL.height + paddingBR.height);
147     grad.create(gradsize, CV_32FC2);  // <magnitude*(1-alpha), magnitude*alpha>
148     qangle.create(gradsize, CV_8UC2); // [0..nbins-1] - quantized gradient orientation
149     Size wholeSize;
150     Point roiofs;
151     img.locateROI(wholeSize, roiofs);
152
153     int i, x, y;
154     int cn = img.channels();
155
156     Mat_<float> _lut(1, 256);
157     const float* lut = &_lut(0,0);
158
159     if( gammaCorrection )
160         for( i = 0; i < 256; i++ )
161             _lut(0,i) = std::sqrt((float)i);
162     else
163         for( i = 0; i < 256; i++ )
164             _lut(0,i) = (float)i;
165
166     AutoBuffer<int> mapbuf(gradsize.width + gradsize.height + 4);
167     int* xmap = (int*)mapbuf + 1;
168     int* ymap = xmap + gradsize.width + 2;
169
170     const int borderType = (int)BORDER_REFLECT_101;
171
172     for( x = -1; x < gradsize.width + 1; x++ )
173         xmap[x] = borderInterpolate(x - paddingTL.width + roiofs.x,
174                         wholeSize.width, borderType);
175     for( y = -1; y < gradsize.height + 1; y++ )
176         ymap[y] = borderInterpolate(y - paddingTL.height + roiofs.y,
177                         wholeSize.height, borderType);
178
179     // x- & y- derivatives for the whole row
180     int width = gradsize.width;
181     AutoBuffer<float> _dbuf(width*4);
182     float* dbuf = _dbuf;
183     Mat Dx(1, width, CV_32F, dbuf);
184     Mat Dy(1, width, CV_32F, dbuf + width);
185     Mat Mag(1, width, CV_32F, dbuf + width*2);
186     Mat Angle(1, width, CV_32F, dbuf + width*3);
187
188     int _nbins = nbins;
189     float angleScale = (float)(_nbins/CV_PI);
190
191     for( y = 0; y < gradsize.height; y++ )
192     {
193         const uchar* imgPtr = img.data + img.step*ymap[y];
194         const uchar* prevPtr = img.data + img.step*ymap[y-1];
195         const uchar* nextPtr = img.data + img.step*ymap[y+1];
196         float* gradPtr = (float*)grad.ptr(y);
197         uchar* qanglePtr = (uchar*)qangle.ptr(y);
198         
199         if( cn == 1 )
200         {
201             for( x = 0; x < width; x++ )
202             {
203                 int x1 = xmap[x];
204                 dbuf[x] = (float)(lut[imgPtr[xmap[x+1]]] - lut[imgPtr[xmap[x-1]]]);
205                 dbuf[width + x] = (float)(lut[nextPtr[x1]] - lut[prevPtr[x1]]);
206             }
207         }
208         else
209         {
210             for( x = 0; x < width; x++ )
211             {
212                 int x1 = xmap[x]*3;
213                 const uchar* p2 = imgPtr + xmap[x+1]*3;
214                 const uchar* p0 = imgPtr + xmap[x-1]*3;
215                 float dx0, dy0, dx, dy, mag0, mag;
216
217                 dx0 = lut[p2[2]] - lut[p0[2]];
218                 dy0 = lut[nextPtr[x1+2]] - lut[prevPtr[x1+2]];
219                 mag0 = dx0*dx0 + dy0*dy0;
220                 
221                 dx = lut[p2[1]] - lut[p0[1]];
222                 dy = lut[nextPtr[x1+1]] - lut[prevPtr[x1+1]];
223                 mag = dx*dx + dy*dy;
224                 
225                 if( mag0 < mag )
226                 {
227                     dx0 = dx;
228                     dy0 = dy;
229                     mag0 = mag;
230                 }
231                 
232                 dx = lut[p2[0]] - lut[p0[0]];
233                 dy = lut[nextPtr[x1]] - lut[prevPtr[x1]];
234                 mag = dx*dx + dy*dy;
235                 
236                 if( mag0 < mag )
237                 {
238                     dx0 = dx;
239                     dy0 = dy;
240                     mag0 = mag;
241                 }
242
243                 dbuf[x] = dx0;
244                 dbuf[x+width] = dy0;
245             }
246         }
247         
248         cartToPolar( Dx, Dy, Mag, Angle, false );
249
250         for( x = 0; x < width; x++ )
251         {
252             float mag = dbuf[x+width*2], angle = dbuf[x+width*3]*angleScale - 0.5f;
253             int hidx = cvFloor(angle);
254             angle -= hidx;
255             if( hidx < 0 )
256                 hidx += _nbins;
257             else if( hidx >= _nbins )
258                 hidx -= _nbins;
259             assert( (unsigned)hidx < (unsigned)_nbins );
260
261             qanglePtr[x*2] = (uchar)hidx;
262             hidx++;
263             hidx &= hidx < _nbins ? -1 : 0;
264             qanglePtr[x*2+1] = (uchar)hidx;
265             gradPtr[x*2] = mag*(1.f - angle);
266             gradPtr[x*2+1] = mag*angle;
267         }
268     }
269 }
270
271
272 struct HOGCache
273 {
274     struct BlockData
275     {
276         BlockData() : histOfs(0), imgOffset() {}
277         int histOfs;
278         Point imgOffset;
279     };
280
281     struct PixData
282     {
283         size_t gradOfs, qangleOfs;
284         int histOfs[4];
285         float histWeights[4];
286         float gradWeight;
287     };
288
289     HOGCache();
290     HOGCache(const HOGDescriptor* descriptor,
291         const Mat& img, Size paddingTL, Size paddingBR,
292         bool useCache, Size cacheStride);
293     virtual ~HOGCache() {};
294     virtual void init(const HOGDescriptor* descriptor,
295         const Mat& img, Size paddingTL, Size paddingBR,
296         bool useCache, Size cacheStride);
297
298     Size windowsInImage(Size imageSize, Size winStride) const;
299     Rect getWindow(Size imageSize, Size winStride, int idx) const;
300
301     const float* getBlock(Point pt, float* buf);
302     virtual void normalizeBlockHistogram(float* histogram) const;
303     
304     vector<PixData> pixData;
305     vector<BlockData> blockData;
306
307     bool useCache;
308     vector<int> ymaxCached;
309     Size winSize, cacheStride;
310     Size nblocks, ncells;
311     int blockHistogramSize;
312     int count1, count2, count4;
313     Point imgoffset;
314     Mat_<float> blockCache;
315     Mat_<uchar> blockCacheFlags;
316
317     Mat grad, qangle;
318     const HOGDescriptor* descriptor;
319 };
320
321
322 HOGCache::HOGCache()
323 {
324     useCache = false;
325     blockHistogramSize = count1 = count2 = count4 = 0;
326     descriptor = 0;
327 }
328
329 HOGCache::HOGCache(const HOGDescriptor* _descriptor,
330         const Mat& _img, Size _paddingTL, Size _paddingBR,
331         bool _useCache, Size _cacheStride)
332 {
333     init(_descriptor, _img, _paddingTL, _paddingBR, _useCache, _cacheStride);
334 }
335
336 void HOGCache::init(const HOGDescriptor* _descriptor,
337         const Mat& _img, Size _paddingTL, Size _paddingBR,
338         bool _useCache, Size _cacheStride)
339 {
340     descriptor = _descriptor;
341     cacheStride = _cacheStride;
342     useCache = _useCache;
343
344     descriptor->computeGradient(_img, grad, qangle, _paddingTL, _paddingBR);
345     imgoffset = _paddingTL;
346
347     winSize = descriptor->winSize;
348     Size blockSize = descriptor->blockSize;
349     Size blockStride = descriptor->blockStride;
350     Size cellSize = descriptor->cellSize;
351     Size winSize = descriptor->winSize;
352     int i, j, nbins = descriptor->nbins;
353     int rawBlockSize = blockSize.width*blockSize.height;
354
355     nblocks = Size((winSize.width - blockSize.width)/blockStride.width + 1,
356                    (winSize.height - blockSize.height)/blockStride.height + 1);
357     ncells = Size(blockSize.width/cellSize.width, blockSize.height/cellSize.height);
358     blockHistogramSize = ncells.width*ncells.height*nbins;
359
360     if( useCache )
361     {
362         Size cacheSize((grad.cols - blockSize.width)/cacheStride.width+1,
363                        (winSize.height/cacheStride.height)+1);
364         blockCache.create(cacheSize.height, cacheSize.width*blockHistogramSize);
365         blockCacheFlags.create(cacheSize);
366         size_t i, cacheRows = blockCache.rows;
367         ymaxCached.resize(cacheRows);
368         for( i = 0; i < cacheRows; i++ )
369             ymaxCached[i] = -1;
370     }
371
372     Mat_<float> weights(blockSize);
373     float sigma = (float)descriptor->getWinSigma();
374     float scale = 1.f/(sigma*sigma*2);
375
376     for(i = 0; i < blockSize.height; i++)
377         for(j = 0; j < blockSize.width; j++)
378         {
379             float di = i - blockSize.height*0.5f;
380             float dj = j - blockSize.width*0.5f;
381             weights(i,j) = std::exp(-(di*di + dj*dj)*scale);
382         }
383
384     blockData.resize(nblocks.width*nblocks.height);
385     pixData.resize(rawBlockSize*3);
386
387     // Initialize 2 lookup tables, pixData & blockData.
388     // Here is why:
389     //
390     // The detection algorithm runs in 4 nested loops (at each pyramid layer):
391     //  loop over the windows within the input image
392     //    loop over the blocks within each window
393     //      loop over the cells within each block
394     //        loop over the pixels in each cell
395     //
396     // As each of the loops runs over a 2-dimensional array,
397     // we could get 8(!) nested loops in total, which is very-very slow.
398     //
399     // To speed the things up, we do the following:
400     //   1. loop over windows is unrolled in the HOGDescriptor::{compute|detect} methods;
401     //         inside we compute the current search window using getWindow() method.
402     //         Yes, it involves some overhead (function call + couple of divisions),
403     //         but it's tiny in fact.
404     //   2. loop over the blocks is also unrolled. Inside we use pre-computed blockData[j]
405     //         to set up gradient and histogram pointers.
406     //   3. loops over cells and pixels in each cell are merged
407     //       (since there is no overlap between cells, each pixel in the block is processed once)
408     //      and also unrolled. Inside we use PixData[k] to access the gradient values and
409     //      update the histogram
410     //
411     count1 = count2 = count4 = 0;
412     for( j = 0; j < blockSize.width; j++ )
413         for( i = 0; i < blockSize.height; i++ )
414         {
415             PixData* data = 0;
416             float cellX = (j+0.5f)/cellSize.width - 0.5f;
417             float cellY = (i+0.5f)/cellSize.height - 0.5f;
418             int icellX0 = cvFloor(cellX);
419             int icellY0 = cvFloor(cellY);
420             int icellX1 = icellX0 + 1, icellY1 = icellY0 + 1;
421             cellX -= icellX0;
422             cellY -= icellY0;
423             
424             if( (unsigned)icellX0 < (unsigned)ncells.width &&
425                 (unsigned)icellX1 < (unsigned)ncells.width )
426             {
427                 if( (unsigned)icellY0 < (unsigned)ncells.height &&
428                     (unsigned)icellY1 < (unsigned)ncells.height )
429                 {
430                     data = &pixData[rawBlockSize*2 + (count4++)];
431                     data->histOfs[0] = (icellX0*ncells.height + icellY0)*nbins;
432                     data->histWeights[0] = (1.f - cellX)*(1.f - cellY);
433                     data->histOfs[1] = (icellX1*ncells.height + icellY0)*nbins;
434                     data->histWeights[1] = cellX*(1.f - cellY);
435                     data->histOfs[2] = (icellX0*ncells.height + icellY1)*nbins;
436                     data->histWeights[2] = (1.f - cellX)*cellY;
437                     data->histOfs[3] = (icellX1*ncells.height + icellY1)*nbins;
438                     data->histWeights[3] = cellX*cellY;
439                 }
440                 else
441                 {
442                     data = &pixData[rawBlockSize + (count2++)];
443                     if( (unsigned)icellY0 < (unsigned)ncells.height )
444                     {
445                         icellY1 = icellY0;
446                         cellY = 1.f - cellY;
447                     }
448                     data->histOfs[0] = (icellX0*ncells.height + icellY1)*nbins;
449                     data->histWeights[0] = (1.f - cellX)*cellY;
450                     data->histOfs[1] = (icellX1*ncells.height + icellY1)*nbins;
451                     data->histWeights[1] = cellX*cellY;
452                     data->histOfs[2] = data->histOfs[3] = 0;
453                     data->histWeights[2] = data->histWeights[3] = 0;
454                 }
455             }
456             else
457             {
458                 if( (unsigned)icellX0 < (unsigned)ncells.width )
459                 {
460                     icellX1 = icellX0;
461                     cellX = 1.f - cellX;
462                 }
463
464                 if( (unsigned)icellY0 < (unsigned)ncells.height &&
465                     (unsigned)icellY1 < (unsigned)ncells.height )
466                 {
467                     data = &pixData[rawBlockSize + (count2++)];
468                     data->histOfs[0] = (icellX1*ncells.height + icellY0)*nbins;
469                     data->histWeights[0] = cellX*(1.f - cellY);
470                     data->histOfs[1] = (icellX1*ncells.height + icellY1)*nbins;
471                     data->histWeights[1] = cellX*cellY;
472                     data->histOfs[2] = data->histOfs[3] = 0;
473                     data->histWeights[2] = data->histWeights[3] = 0;
474                 }
475                 else
476                 {
477                     data = &pixData[count1++];
478                     if( (unsigned)icellY0 < (unsigned)ncells.height )
479                     {
480                         icellY1 = icellY0;
481                         cellY = 1.f - cellY;
482                     }
483                     data->histOfs[0] = (icellX1*ncells.height + icellY1)*nbins;
484                     data->histWeights[0] = cellX*cellY;
485                     data->histOfs[1] = data->histOfs[2] = data->histOfs[3] = 0;
486                     data->histWeights[1] = data->histWeights[2] = data->histWeights[3] = 0;
487                 }
488             }
489             data->gradOfs = (grad.cols*i + j)*2;
490             data->qangleOfs = (qangle.cols*i + j)*2;
491             data->gradWeight = weights(i,j);
492         }
493
494     assert( count1 + count2 + count4 == rawBlockSize );
495     // defragment pixData
496     for( j = 0; j < count2; j++ )
497         pixData[j + count1] = pixData[j + rawBlockSize];
498     for( j = 0; j < count4; j++ )
499         pixData[j + count1 + count2] = pixData[j + rawBlockSize*2];
500     count2 += count1;
501     count4 += count2;
502
503     // initialize blockData
504     for( j = 0; j < nblocks.width; j++ )
505         for( i = 0; i < nblocks.height; i++ )
506         {
507             BlockData& data = blockData[j*nblocks.height + i];
508             data.histOfs = (j*nblocks.height + i)*blockHistogramSize;
509             data.imgOffset = Point(j*blockStride.width,i*blockStride.height);
510         }
511 }
512
513
514 const float* HOGCache::getBlock(Point pt, float* buf)
515 {
516     float* blockHist = buf;
517     assert(descriptor != 0);
518
519     Size blockSize = descriptor->blockSize;
520     pt += imgoffset;
521
522     CV_Assert( (unsigned)pt.x <= (unsigned)(grad.cols - blockSize.width) &&
523                (unsigned)pt.y <= (unsigned)(grad.rows - blockSize.height) );
524     
525     if( useCache )
526     {
527         CV_Assert( pt.x % cacheStride.width == 0 &&
528                    pt.y % cacheStride.height == 0 );
529         Point cacheIdx(pt.x/cacheStride.width,
530                       (pt.y/cacheStride.height) % blockCache.rows);
531         if( pt.y != ymaxCached[cacheIdx.y] )
532         {
533             Mat_<uchar> cacheRow = blockCacheFlags.row(cacheIdx.y);
534             cacheRow = (uchar)0;
535             ymaxCached[cacheIdx.y] = pt.y;
536         }
537
538         blockHist = &blockCache[cacheIdx.y][cacheIdx.x*blockHistogramSize];
539         uchar& computedFlag = blockCacheFlags(cacheIdx.y, cacheIdx.x);
540         if( computedFlag != 0 )
541             return blockHist;
542         computedFlag = (uchar)1; // set it at once, before actual computing
543     }
544
545     int k, C1 = count1, C2 = count2, C4 = count4;
546     const float* gradPtr = (const float*)(grad.data + grad.step*pt.y) + pt.x*2;
547     const uchar* qanglePtr = qangle.data + qangle.step*pt.y + pt.x*2;
548
549     CV_Assert( blockHist != 0 );
550
551     for( k = 0; k < blockHistogramSize; k++ )
552         blockHist[k] = 0.f;
553     
554     const PixData* _pixData = &pixData[0];
555
556     for( k = 0; k < C1; k++ )
557     {
558         const PixData& pk = _pixData[k];
559         const float* a = gradPtr + pk.gradOfs;
560         float w = pk.gradWeight*pk.histWeights[0];
561         const uchar* h = qanglePtr + pk.qangleOfs;
562         int h0 = h[0], h1 = h[1];
563         float* hist = blockHist + pk.histOfs[0];
564         float t0 = hist[h0] + a[0]*w;
565         float t1 = hist[h1] + a[1]*w;
566         hist[h0] = t0; hist[h1] = t1;
567     }
568
569     for( ; k < C2; k++ )
570     {
571         const PixData& pk = _pixData[k];
572         const float* a = gradPtr + pk.gradOfs;
573         float w, t0, t1, a0 = a[0], a1 = a[1];
574         const uchar* h = qanglePtr + pk.qangleOfs;
575         int h0 = h[0], h1 = h[1];
576         
577         float* hist = blockHist + pk.histOfs[0];
578         w = pk.gradWeight*pk.histWeights[0];
579         t0 = hist[h0] + a0*w;
580         t1 = hist[h1] + a1*w;
581         hist[h0] = t0; hist[h1] = t1;
582         
583         hist = blockHist + pk.histOfs[1];
584         w = pk.gradWeight*pk.histWeights[1];
585         t0 = hist[h0] + a0*w;
586         t1 = hist[h1] + a1*w;
587         hist[h0] = t0; hist[h1] = t1;
588     }
589
590     for( ; k < C4; k++ )
591     {
592         const PixData& pk = _pixData[k];
593         const float* a = gradPtr + pk.gradOfs;
594         float w, t0, t1, a0 = a[0], a1 = a[1];
595         const uchar* h = qanglePtr + pk.qangleOfs;
596         int h0 = h[0], h1 = h[1];
597         
598         float* hist = blockHist + pk.histOfs[0];
599         w = pk.gradWeight*pk.histWeights[0];
600         t0 = hist[h0] + a0*w;
601         t1 = hist[h1] + a1*w;
602         hist[h0] = t0; hist[h1] = t1;
603         
604         hist = blockHist + pk.histOfs[1];
605         w = pk.gradWeight*pk.histWeights[1];
606         t0 = hist[h0] + a0*w;
607         t1 = hist[h1] + a1*w;
608         hist[h0] = t0; hist[h1] = t1;
609
610         hist = blockHist + pk.histOfs[2];
611         w = pk.gradWeight*pk.histWeights[2];
612         t0 = hist[h0] + a0*w;
613         t1 = hist[h1] + a1*w;
614         hist[h0] = t0; hist[h1] = t1;
615
616         hist = blockHist + pk.histOfs[3];
617         w = pk.gradWeight*pk.histWeights[3];
618         t0 = hist[h0] + a0*w;
619         t1 = hist[h1] + a1*w;
620         hist[h0] = t0; hist[h1] = t1;
621     }
622
623     normalizeBlockHistogram(blockHist);
624
625     return blockHist;
626 }
627
628
629 void HOGCache::normalizeBlockHistogram(float* _hist) const
630 {
631     float* hist = &_hist[0];
632     size_t i, sz = blockHistogramSize;
633     
634     float sum = 0;
635     for( i = 0; i < sz; i++ )
636         sum += hist[i]*hist[i];
637     float scale = 1.f/(std::sqrt(sum)+sz*0.1f), thresh = (float)descriptor->L2HysThreshold;
638     for( i = 0, sum = 0; i < sz; i++ )
639     {
640         hist[i] = std::min(hist[i]*scale, thresh);
641         sum += hist[i]*hist[i];
642     }
643     scale = 1.f/(std::sqrt(sum)+1e-3f);
644     for( i = 0; i < sz; i++ )
645         hist[i] *= scale;
646 }
647     
648     
649 Size HOGCache::windowsInImage(Size imageSize, Size winStride) const
650 {
651     return Size((imageSize.width - winSize.width)/winStride.width + 1,
652                 (imageSize.height - winSize.height)/winStride.height + 1);
653 }
654
655 Rect HOGCache::getWindow(Size imageSize, Size winStride, int idx) const
656 {
657     int nwindowsX = (imageSize.width - winSize.width)/winStride.width + 1;
658     int y = idx / nwindowsX;
659     int x = idx - nwindowsX*y;
660     return Rect( x*winStride.width, y*winStride.height, winSize.width, winSize.height );
661 }
662
663
664 void HOGDescriptor::compute(const Mat& img, vector<float>& descriptors,
665                             Size winStride, Size padding,
666                             const vector<Point>& locations) const
667 {
668     if( winStride == Size() )
669         winStride = cellSize;
670     Size cacheStride(gcd(winStride.width, blockStride.width),
671                      gcd(winStride.height, blockStride.height));
672     size_t nwindows = locations.size();
673     padding.width = (int)alignSize(std::max(padding.width, 0), cacheStride.width);
674     padding.height = (int)alignSize(std::max(padding.height, 0), cacheStride.height);
675     Size paddedImgSize(img.cols + padding.width*2, img.rows + padding.height*2);
676     
677     HOGCache cache(this, img, padding, padding, nwindows == 0, cacheStride);
678
679     if( !nwindows )
680         nwindows = cache.windowsInImage(paddedImgSize, winStride).area();
681
682     const HOGCache::BlockData* blockData = &cache.blockData[0];
683
684     int nblocks = cache.nblocks.area();
685     int blockHistogramSize = cache.blockHistogramSize;
686     size_t dsize = getDescriptorSize();
687     descriptors.resize(dsize*nwindows);
688
689     for( size_t i = 0; i < nwindows; i++ )
690     {
691         float* descriptor = &descriptors[i*dsize];
692        
693         Point pt0;
694         if( !locations.empty() )
695         {
696             pt0 = locations[i];
697             if( pt0.x < -padding.width || pt0.x > img.cols + padding.width - winSize.width ||
698                 pt0.y < -padding.height || pt0.y > img.rows + padding.height - winSize.height )
699                 continue;
700         }
701         else
702         {
703             pt0 = cache.getWindow(paddedImgSize, winStride, (int)i).tl() - Point(padding);
704             CV_Assert(pt0.x % cacheStride.width == 0 && pt0.y % cacheStride.height == 0);
705         }
706
707         for( int j = 0; j < nblocks; j++ )
708         {
709             const HOGCache::BlockData& bj = blockData[j];
710             Point pt = pt0 + bj.imgOffset;
711
712             float* dst = descriptor + bj.histOfs;
713             const float* src = cache.getBlock(pt, dst);
714             if( src != dst )
715                 for( int k = 0; k < blockHistogramSize; k++ )
716                     dst[k] = src[k];
717         }
718     }
719 }
720
721
722 void HOGDescriptor::detect(const Mat& img,
723     vector<Point>& hits, double hitThreshold,
724     Size winStride, Size padding, const vector<Point>& locations) const
725 {
726     hits.clear();
727     if( svmDetector.empty() )
728         return;
729     
730     if( winStride == Size() )
731         winStride = cellSize;
732     Size cacheStride(gcd(winStride.width, blockStride.width),
733                      gcd(winStride.height, blockStride.height));
734     size_t nwindows = locations.size();
735     padding.width = (int)alignSize(std::max(padding.width, 0), cacheStride.width);
736     padding.height = (int)alignSize(std::max(padding.height, 0), cacheStride.height);
737     Size paddedImgSize(img.cols + padding.width*2, img.rows + padding.height*2);
738     
739     HOGCache cache(this, img, padding, padding, nwindows == 0, cacheStride);
740
741     if( !nwindows )
742         nwindows = cache.windowsInImage(paddedImgSize, winStride).area();
743
744     const HOGCache::BlockData* blockData = &cache.blockData[0];
745
746     int nblocks = cache.nblocks.area();
747     int blockHistogramSize = cache.blockHistogramSize;
748     size_t dsize = getDescriptorSize();
749
750     double rho = svmDetector.size() > dsize ? svmDetector[dsize] : 0;
751     vector<float> blockHist(blockHistogramSize);
752
753     for( size_t i = 0; i < nwindows; i++ )
754     {
755         Point pt0;
756         if( !locations.empty() )
757         {
758             pt0 = locations[i];
759             if( pt0.x < -padding.width || pt0.x > img.cols + padding.width - winSize.width ||
760                 pt0.y < -padding.height || pt0.y > img.rows + padding.height - winSize.height )
761                 continue;
762         }
763         else
764         {
765             pt0 = cache.getWindow(paddedImgSize, winStride, (int)i).tl() - Point(padding);
766             CV_Assert(pt0.x % cacheStride.width == 0 && pt0.y % cacheStride.height == 0);
767         }
768         double s = rho;
769         const float* svmVec = &svmDetector[0];
770         int j, k;
771         for( j = 0; j < nblocks; j++, svmVec += blockHistogramSize )
772         {
773             const HOGCache::BlockData& bj = blockData[j];
774             Point pt = pt0 + bj.imgOffset;
775
776             const float* vec = cache.getBlock(pt, &blockHist[0]);
777             for( k = 0; k <= blockHistogramSize - 4; k += 4 )
778                 s += vec[k]*svmVec[k] + vec[k+1]*svmVec[k+1] +
779                     vec[k+2]*svmVec[k+2] + vec[k+3]*svmVec[k+3];
780             for( ; k < blockHistogramSize; k++ )
781                 s += vec[k]*svmVec[k];
782         }
783         if( s >= hitThreshold )
784             hits.push_back(pt0);
785     }
786 }
787
788     
789 struct HOGInvoker
790 {
791     HOGInvoker( const HOGDescriptor* _hog, const Mat& _img,
792                 double _hitThreshold, Size _winStride, Size _padding,
793                 const double* _levelScale, ConcurrentRectVector* _vec ) 
794     {
795         hog = _hog;
796         img = _img;
797         hitThreshold = _hitThreshold;
798         winStride = _winStride;
799         padding = _padding;
800         levelScale = _levelScale;
801         vec = _vec;
802     }
803     
804     void operator()( const BlockedRange& range ) const
805     {
806         int i, i1 = range.begin(), i2 = range.end();
807         double minScale = i1 > 0 ? levelScale[i1] : i2 > 1 ? levelScale[i1+1] : std::max(img.cols, img.rows);
808         Size maxSz(cvCeil(img.cols/minScale), cvCeil(img.rows/minScale));
809         Mat smallerImgBuf(maxSz, img.type());
810         vector<Point> locations;
811         
812         for( i = i1; i < i2; i++ )
813         {
814             double scale = levelScale[i];
815             Size sz(cvRound(img.cols/scale), cvRound(img.rows/scale));
816             Mat smallerImg(sz, img.type(), smallerImgBuf.data);
817             if( sz == img.size() )
818                 smallerImg = Mat(sz, img.type(), img.data, img.step);
819             else
820                 resize(img, smallerImg, sz);
821             hog->detect(smallerImg, locations, hitThreshold, winStride, padding);
822             Size scaledWinSize = Size(cvRound(hog->winSize.width*scale), cvRound(hog->winSize.height*scale));
823             for( size_t j = 0; j < locations.size(); j++ )
824                 vec->push_back(Rect(cvRound(locations[j].x*scale),
825                                     cvRound(locations[j].y*scale),
826                                     scaledWinSize.width, scaledWinSize.height));
827         }
828     }
829     
830     const HOGDescriptor* hog;
831     Mat img;
832     double hitThreshold;
833     Size winStride;
834     Size padding;
835     const double* levelScale;
836     ConcurrentRectVector* vec;
837 };
838
839
840 void HOGDescriptor::detectMultiScale(
841     const Mat& img, vector<Rect>& foundLocations,
842     double hitThreshold, Size winStride, Size padding,
843     double scale0, int groupThreshold) const
844 {
845     double scale = 1.;
846     const int maxLevels = 64;
847     int levels = 0;
848
849     vector<double> levelScale;
850     for( levels = 0; levels < maxLevels; levels++ )
851     {
852         levelScale.push_back(scale);
853         if( cvRound(img.cols/scale) < winSize.width ||
854             cvRound(img.rows/scale) < winSize.height ||
855             scale0 <= 1 )
856             break;
857         scale *= scale0;
858     }
859     levels = std::max(levels, 1);
860     levelScale.resize(levels);
861
862     ConcurrentRectVector allCandidates;
863     
864     parallel_for(BlockedRange(0, (int)levelScale.size()),
865                  HOGInvoker(this, img, hitThreshold, winStride, padding, &levelScale[0], &allCandidates));
866     
867     foundLocations.resize(allCandidates.size());
868     std::copy(allCandidates.begin(), allCandidates.end(), foundLocations.begin());
869
870     groupRectangles(foundLocations, groupThreshold, 0.2);
871 }
872
873 vector<float> HOGDescriptor::getDefaultPeopleDetector()
874 {
875     static const float detector[] = {
876        0.05359386f, -0.14721455f, -0.05532170f, 0.05077307f,
877        0.11547081f, -0.04268804f, 0.04635834f, -0.05468199f, 0.08232084f,
878        0.10424068f, -0.02294518f, 0.01108519f, 0.01378693f, 0.11193510f,
879        0.01268418f, 0.08528346f, -0.06309239f, 0.13054633f, 0.08100729f,
880        -0.05209739f, -0.04315529f, 0.09341384f, 0.11035026f, -0.07596218f,
881        -0.05517511f, -0.04465296f, 0.02947334f, 0.04555536f,
882        -3.55954492e-003f, 0.07818956f, 0.07730991f, 0.07890715f, 0.06222893f,
883        0.09001380f, -0.03574381f, 0.03414327f, 0.05677258f, -0.04773581f,
884        0.03746637f, -0.03521175f, 0.06955440f, -0.03849038f, 0.01052293f,
885        0.01736112f, 0.10867710f, 0.08748853f, 3.29739624e-003f, 0.10907028f,
886        0.07913758f, 0.10393070f, 0.02091867f, 0.11594022f, 0.13182420f,
887        0.09879354f, 0.05362710f, -0.06745391f, -7.01260753e-003f,
888        5.24702156e-003f, 0.03236255f, 0.01407916f, 0.02207983f, 0.02537322f,
889        0.04547948f, 0.07200756f, 0.03129894f, -0.06274468f, 0.02107014f,
890        0.06035208f, 0.08636236f, 4.53164103e-003f, 0.02193363f, 0.02309801f,
891        0.05568166f, -0.02645093f, 0.04448695f, 0.02837519f, 0.08975694f,
892        0.04461516f, 0.08975355f, 0.07514391f, 0.02306982f, 0.10410084f,
893        0.06368385f, 0.05943464f, 4.58420580e-003f, 0.05220337f, 0.06675851f,
894        0.08358569f, 0.06712101f, 0.06559004f, -0.03930482f, -9.15936660e-003f,
895        -0.05897915f, 0.02816453f, 0.05032348f, 0.06780671f, 0.03377650f,
896        -6.09417039e-004f, -0.01795146f, -0.03083684f, -0.01302475f,
897        -0.02972313f, 7.88706727e-003f, -0.03525961f, -2.50397739e-003f,
898        0.05245084f, 0.11791293f, -0.02167498f, 0.05299332f, 0.06640524f,
899        0.05190265f, -8.27316567e-003f, 0.03033127f, 0.05842173f,
900        -4.01050318e-003f, -6.25105947e-003f, 0.05862958f, -0.02465461f,
901        0.05546781f, -0.08228195f, -0.07234028f, 0.04640540f, -0.01308254f,
902        -0.02506191f, 0.03100746f, -0.04665651f, -0.04591486f, 0.02949927f,
903        0.06035462f, 0.02244646f, -0.01698639f, 0.01040041f, 0.01131170f,
904        0.05419579f, -0.02130277f, -0.04321722f, -0.03665198f, 0.01126490f,
905        -0.02606488f, -0.02228328f, -0.02255680f, -0.03427236f,
906        -7.75165204e-003f, -0.06195229f, 8.21638294e-003f, 0.09535975f,
907        -0.03709979f, -0.06942501f, 0.14579427f, -0.05448192f, -0.02055904f,
908        0.05747357f, 0.02781788f, -0.07077577f, -0.05178314f, -0.10429011f,
909        -0.11235505f, 0.07529039f, -0.07559302f, -0.08786739f, 0.02983843f,
910        0.02667585f, 0.01382199f, -0.01797496f, -0.03141199f, -0.02098101f,
911        0.09029204f, 0.04955018f, 0.13718739f, 0.11379953f, 1.80019124e-003f,
912        -0.04577610f, -1.11108483e-003f, -0.09470536f, -0.11596080f,
913        0.04489342f, 0.01784211f, 3.06850672e-003f, 0.10781866f,
914        3.36498418e-003f, -0.10842580f, -0.07436839f, -0.10535070f,
915        -0.01866805f, 0.16057891f, -5.07316366e-003f, -0.04295658f,
916        -5.90488780e-003f, 8.82003549e-003f, -0.01492646f, -0.05029279f,
917        -0.12875880f, 8.78831954e-004f, -0.01297184f, -0.07592774f,
918        -0.02668831f, -6.93787413e-004f, 0.02406698f, -0.01773298f,
919        -0.03855745f, -0.05877856f, 0.03259695f, 0.12826584f, 0.06292590f,
920        -4.10733931e-003f, 0.10996531f, 0.01332991f, 0.02088735f, 0.04037504f,
921        -0.05210760f, 0.07760046f, 0.06399347f, -0.05751930f, -0.10053057f,
922        0.07505023f, -0.02139782f, 0.01796176f, 2.34400877e-003f, -0.04208319f,
923        0.07355055f, 0.05093350f, -0.02996780f, -0.02219072f, 0.03355330f,
924        0.04418742f, -0.05580705f, -0.05037573f, -0.04548179f, 0.01379514f,
925        0.02150671f, -0.02194211f, -0.13682702f, 0.05464972f, 0.01608082f,
926        0.05309116f, 0.04701022f, 1.33690401e-003f, 0.07575664f, 0.09625306f,
927        8.92647635e-003f, -0.02819123f, 0.10866830f, -0.03439325f,
928        -0.07092371f, -0.06004780f, -0.02712298f, -7.07467366e-003f,
929        -0.01637020f, 0.01336790f, -0.10313606f, 0.04906582f, -0.05732445f,
930        -0.02731079f, 0.01042235f, -0.08340668f, 0.03686501f, 0.06108340f,
931        0.01322748f, -0.07809529f, 0.03774724f, -0.03413248f, -0.06096525f,
932        -0.04212124f, -0.07982176f, -1.25973229e-003f, -0.03045501f,
933        -0.01236493f, -0.06312395f, 0.04789570f, -0.04602066f, 0.08576570f,
934        0.02521080f, 0.02988098f, 0.10314583f, 0.07060035f, 0.04520544f,
935        -0.04426654f, 0.13146530f, 0.08386490f, 0.02164590f, -2.12280243e-003f,
936        -0.03686353f, -0.02074944f, -0.03829959f, -0.01530596f, 0.02689708f,
937        0.11867401f, -0.06043470f, -0.02785023f, -0.04775074f, 0.04878745f,
938        0.06350956f, 0.03494788f, 0.01467400f, 1.17890188e-003f, 0.04379614f,
939        2.03681854e-003f, -0.03958609f, -0.01072688f, 6.43705716e-003f,
940        0.02996500f, -0.03418507f, -0.01960307f, -0.01219154f,
941        -4.37000440e-003f, -0.02549453f, 0.02646318f, -0.01632513f,
942        6.46516960e-003f, -0.01929734f, 4.78711911e-003f, 0.04962371f,
943        0.03809111f, 0.07265724f, 0.05758125f, -0.03741554f, 0.01648608f,
944        -8.45285598e-003f, 0.03996826f, -0.08185477f, 0.02638875f,
945        -0.04026615f, -0.02744674f, -0.04071517f, 1.05096330e-003f,
946        -0.04741232f, -0.06733172f, 8.70434940e-003f, -0.02192543f,
947        1.35350740e-003f, -0.03056974f, -0.02975521f, -0.02887780f,
948        -0.01210713f, -0.04828526f, -0.09066251f, -0.09969629f, -0.03665164f,
949        -8.88111943e-004f, -0.06826669f, -0.01866150f, -0.03627640f,
950        -0.01408288f, 0.01874239f, -0.02075835f, 0.09145175f, -0.03547291f,
951        0.05396780f, 0.04198981f, 0.01301925f, -0.03384354f, -0.12201976f,
952        0.06830920f, -0.03715654f, 9.55848210e-003f, 5.05685573e-003f,
953        0.05659294f, 3.90764466e-003f, 0.02808490f, -0.05518097f, -0.03711621f,
954        -0.02835565f, -0.04420464f, -0.01031947f, 0.01883466f,
955        -8.49525444e-003f, -0.09419250f, -0.01269387f, -0.02133371f,
956        -0.10190815f, -0.07844430f, 2.43644323e-003f, -4.09610150e-003f,
957        0.01202551f, -0.06452291f, -0.10593818f, -0.02464746f, -0.02199699f,
958        -0.07401930f, 0.07285886f, 8.87513801e-004f, 9.97662079e-003f,
959        8.46779719e-003f, 0.03730333f, -0.02905126f, 0.03573337f, -0.04393689f,
960        -0.12014472f, 0.03176554f, -2.76015815e-003f, 0.10824566f, 0.05090732f,
961        -3.30179278e-003f, -0.05123822f, 5.04784798e-003f, -0.05664124f,
962        -5.99415926e-003f, -0.05341901f, -0.01221393f, 0.01291318f,
963        9.91760660e-003f, -7.56987557e-003f, -0.06193124f, -2.24549137e-003f,
964        0.01987562f, -0.02018840f, -0.06975540f, -0.06601523f, -0.03349112f,
965        -0.08910118f, -0.03371435f, -0.07406893f, -0.02248047f, -0.06159951f,
966        2.77751544e-003f, -0.05723337f, -0.04792468f, 0.07518548f,
967        2.77279224e-003f, 0.04211938f, 0.03100502f, 0.05278448f, 0.03954679f,
968        -0.03006846f, -0.03851741f, -0.02792403f, -0.02875333f, 0.01531280f,
969        0.02186953f, -0.01989829f, 2.50679464e-003f, -0.10258728f,
970        -0.04785743f, -0.02887216f, 3.85063468e-003f, 0.01112236f,
971        8.29218887e-003f, -0.04822981f, -0.04503597f, -0.03713100f,
972        -0.06988008f, -0.11002295f, -2.69209221e-003f, 1.85383670e-003f,
973        -0.05921049f, -0.06105053f, -0.08458050f, -0.04527602f,
974        8.90329306e-004f, -0.05875023f, -2.68602883e-003f, -0.01591195f,
975        0.03631859f, 0.05493166f, 0.07300330f, 5.53333294e-003f, 0.06400407f,
976        0.01847740f, -5.76280477e-003f, -0.03210877f, 4.25160583e-003f,
977        0.01166520f, -1.44864211e-003f, 0.02253744f, -0.03367080f, 0.06983195f,
978        -4.22323542e-003f, -8.89401045e-003f, -0.07943393f, 0.05199728f,
979        0.06065201f, 0.04133492f, 1.44032843e-003f, -0.09585235f, -0.03964731f,
980        0.04232114f, 0.01750465f, -0.04487902f, -7.59733608e-003f, 0.02011171f,
981        0.04673622f, 0.09011173f, -0.07869188f, -0.04682482f, -0.05080139f,
982        -3.99383716e-003f, -0.05346331f, 0.01085723f, -0.03599333f,
983        -0.07097908f, 0.03551549f, 0.02680387f, 0.03471529f, 0.01790393f,
984        0.05471273f, 9.62048303e-003f, -0.03180215f, 0.05864431f, 0.02330614f,
985        0.01633144f, -0.05616681f, -0.10245429f, -0.08302189f, 0.07291322f,
986        -0.01972590f, -0.02619633f, -0.02485327f, -0.04627592f,
987        1.48853404e-003f, 0.05514185f, -0.01270860f, -0.01948900f, 0.06373586f,
988        0.05002292f, -0.03009798f, 8.76216311e-003f, -0.02474238f,
989        -0.05504891f, 1.74034527e-003f, -0.03333667f, 0.01524987f, 0.11663762f,
990        -1.32344989e-003f, -0.06608453f, 0.05687166f, -6.89525274e-004f,
991        -0.04402352f, 0.09450210f, -0.04222684f, -0.05360983f, 0.01779531f,
992        0.02561388f, -0.11075410f, -8.77790991e-003f, -0.01099504f,
993        -0.10380266f, 0.03103457f, -0.02105741f, -0.07371717f, 0.05146710f,
994        0.10581432f, -0.08617968f, -0.02892107f, 0.01092199f, 0.14551543f,
995        -2.24320893e-003f, -0.05818033f, -0.07390742f, 0.05701261f,
996        0.12937020f, -0.04986651f, 0.10182415f, 0.05028650f, 0.12515625f,
997        0.09175041f, 0.06404983f, 0.01523394f, 0.09460562f, 0.06106631f,
998        -0.14266998f, -0.02926703f, 0.02762171f, 0.02164151f,
999        -9.58488265e-004f, -0.04231362f, -0.09866509f, 0.04322244f,
1000        0.05872034f, -0.04838847f, 0.06319253f, 0.02443798f, -0.03606876f,
1001        9.38737206e-003f, 0.04289991f, -0.01027411f, 0.08156885f, 0.08751175f,
1002        -0.13191354f, 8.16054735e-003f, -0.01452161f, 0.02952677f, 0.03615945f,
1003        -2.09128903e-003f, 0.02246693f, 0.09623287f, 0.09412123f, -0.02924758f,
1004        -0.07815186f, -0.02203079f, -2.02566991e-003f, 0.01094733f,
1005        -0.01442332f, 0.02838561f, 0.11882371f, 7.28798332e-003f, -0.10345965f,
1006        0.07561217f, -0.02049661f, 4.44177445e-003f, 0.01609347f, -0.04893158f,
1007        -0.08758243f, -7.67420698e-003f, 0.08862378f, 0.06098121f, 0.06565887f,
1008        7.32981879e-003f, 0.03558407f, -0.03874352f, -0.02490055f,
1009        -0.06771075f, 0.09939223f, -0.01066077f, 0.01382995f, -0.07289080f,
1010        7.47184316e-003f, 0.10621431f, -0.02878659f, 0.02383525f, -0.03274646f,
1011        0.02137008f, 0.03837290f, 0.02450992f, -0.04296818f, -0.02895143f,
1012        0.05327370f, 0.01499020f, 0.04998732f, 0.12938657f, 0.09391870f,
1013        0.04292390f, -0.03359194f, -0.06809492f, 0.01125796f, 0.17290455f,
1014        -0.03430733f, -0.06255233f, -0.01813114f, 0.11726857f, -0.06127599f,
1015        -0.08677909f, -0.03429872f, 0.04684938f, 0.08161420f, 0.03538774f,
1016        0.01833884f, 0.11321855f, 0.03261845f, -0.04826299f, 0.01752407f,
1017        -0.01796414f, -0.10464549f, -3.30041884e-003f, 2.29343961e-004f,
1018        0.01457292f, -0.02132982f, -0.02602923f, -9.87351313e-003f,
1019        0.04273872f, -0.02103316f, -0.07994065f, 0.02614958f, -0.02111666f,
1020        -0.06964913f, -0.13453490f, -0.06861878f, -6.09341264e-003f,
1021        0.08251446f, 0.15612499f, 2.46531400e-003f, 8.88424646e-003f,
1022        -0.04152999f, 0.02054853f, 0.05277953f, -0.03087788f, 0.02817579f,
1023        0.13939077f, 0.07641046f, -0.03627627f, -0.03015098f, -0.04041540f,
1024        -0.01360690f, -0.06227205f, -0.02738223f, 0.13577610f, 0.15235767f,
1025        -0.05392922f, -0.11175954f, 0.02157129f, 0.01146481f, -0.05264937f,
1026        -0.06595174f, -0.02749175f, 0.11812254f, 0.17404149f, -0.06137035f,
1027        -0.11003478f, -0.01351621f, -0.01745916f, -0.08577441f, -0.04469909f,
1028        -0.06106115f, 0.10559758f, 0.20806813f, -0.09174948f, 7.09621934e-004f,
1029        0.03579374f, 0.07215115f, 0.02221742f, 0.01827742f, -7.90785067e-003f,
1030        0.01489554f, 0.14519960f, -0.06425831f, 0.02990399f, -1.80181325e-003f,
1031        -0.01401528f, -0.04171134f, -3.70530109e-003f, -0.09090481f,
1032        0.09520713f, 0.08845516f, -0.02651753f, -0.03016730f, 0.02562448f,
1033        0.03563816f, -0.03817881f, 0.01433385f, 0.02256983f, 0.02872120f,
1034        0.01001934f, -0.06332260f, 0.04338406f, 0.07001807f, -0.04705722f,
1035        -0.07318907f, 0.02630457f, 0.03106382f, 0.06648342f, 0.10913180f,
1036        -0.01630815f, 0.02910308f, 0.02895109f, 0.08040254f, 0.06969310f,
1037        0.06797734f, 6.08639978e-003f, 4.16588830e-003f, 0.08926726f,
1038        -0.03123648f, 0.02700146f, 0.01168734f, -0.01631594f, 4.61015804e-003f,
1039        8.51359498e-003f, -0.03544224f, 0.03571994f, 4.29766066e-003f,
1040        -0.01970077f, -8.79793242e-003f, 0.09607988f, 0.01544222f,
1041        -0.03923707f, 0.07308586f, 0.06061262f, 1.31683104e-004f,
1042        -7.98222050e-003f, 0.02399261f, -0.06084389f, -0.02743429f,
1043        -0.05475523f, -0.04131311f, 0.03559756f, 0.03055342f, 0.02981433f,
1044        0.14860515f, 0.01766787f, 0.02945257f, 0.04898238f, 0.01026922f,
1045        0.02811658f, 0.08267091f, 0.02732154f, -0.01237693f, 0.11760156f,
1046        0.03802063f, -0.03309754f, 5.24957618e-003f, -0.02460510f, 0.02691451f,
1047        0.05399988f, -0.10133506f, 0.06385437f, -0.01818005f, 0.02259503f,
1048        0.03573135f, 0.01042848f, -0.04153402f, -0.04043029f, 0.01643575f,
1049        0.08326677f, 4.61383024e-004f, -0.05308095f, -0.08536223f,
1050        -1.61011645e-003f, -0.02163720f, -0.01783352f, 0.03859637f,
1051        0.08498885f, -0.01725216f, 0.08625131f, 0.10995087f, 0.09177644f,
1052        0.08498347f, 0.07646490f, 0.05580502f, 0.02693516f, 0.09996913f,
1053        0.09070327f, 0.06667200f, 0.05873008f, -0.02247842f, 0.07772321f,
1054        0.12408436f, 0.12629253f, -8.41997913e-004f, 0.01477783f, 0.09165990f,
1055        -2.98401713e-003f, -0.06466447f, -0.07057302f, 2.09516948e-004f,
1056        0.02210209f, -0.02158809f, -0.08602506f, -0.02284836f,
1057        4.01876355e-003f, 9.56660323e-003f, -0.02073978f, -0.04635138f,
1058        -7.59423291e-003f, -0.01377393f, -0.04559359f, -0.13284740f,
1059        -0.08671406f, -0.03654395f, 0.01142869f, 0.03287891f, -0.04392983f,
1060        0.06142959f, 0.17710890f, 0.10385257f, 0.01329137f, 0.10067633f,
1061        0.12450829f, -0.04476709f, 0.09049144f, 0.04589312f, 0.11167907f,
1062        0.08587538f, 0.04767583f, 1.67188141e-003f, 0.02359802f, -0.03808852f,
1063        0.03126272f, -0.01919029f, -0.05698918f, -0.02365112f, -0.06519032f,
1064        -0.05599358f, -0.07097308f, -0.03301812f, -0.04719102f, -0.02566297f,
1065        0.01324074f, -0.09230672f, -0.05518232f, -0.04712864f, -0.03380903f,
1066        -0.06719479f, 0.01183908f, -0.09326738f, 0.01642865f, 0.03789867f,
1067        -6.61567831e-003f, 0.07796386f, 0.07246574f, 0.04706347f, -0.02523437f,
1068        -0.01696830f, -0.08068866f, 0.06030888f, 0.10527060f, -0.06611756f,
1069        0.02977346f, 0.02621830f, 0.01913855f, -0.08479366f, -0.06322418f,
1070        -0.13570616f, -0.07644490f, 9.31900274e-003f, -0.08095149f,
1071        -0.10197903f, -0.05204025f, 0.01413151f, -0.07800411f, -0.01885122f,
1072        -0.07509381f, -0.10136326f, -0.05212355f, -0.09944065f,
1073        -1.33606605e-003f, -0.06342617f, -0.04178550f, -0.12373723f,
1074        -0.02832736f, -0.06057501f, 0.05830070f, 0.07604282f, -0.06462587f,
1075        8.02447461e-003f, 0.11580125f, 0.12332212f, 0.01978462f,
1076        -2.72378162e-003f, 0.05850752f, -0.04674481f, 0.05148062f,
1077        -2.62542837e-003f, 0.11253355f, 0.09893716f, 0.09785093f, -0.04659257f,
1078        -0.01102429f, -0.07002308f, 0.03088913f, -0.02565549f, -0.07671449f,
1079        3.17443861e-003f, -0.10783514f, -0.02314270f, -0.11089555f,
1080        -0.01024768f, 0.03116021f, -0.04964825f, 0.02281825f, 5.50005678e-003f,
1081        -0.08427856f, -0.14685495f, -0.07719755f, -0.13342668f, -0.04525511f,
1082        -0.09914210f, 0.02588859f, 0.03469279f, 0.04664020f, 0.11688190f,
1083        0.09647275f, 0.10857815f, -0.01448726f, 0.04299758f, -0.06763151f,
1084        1.33257592e-003f, 0.14331576f, 0.07574340f, 0.09166205f, 0.05674926f,
1085        0.11325553f, -0.01106494f, 0.02062161f, -0.11484840f, -0.07492137f,
1086        -0.02864293f, -0.01275638f, -0.06946032f, -0.10101652f, -0.04113498f,
1087        -0.02214783f, -0.01273942f, -0.07480393f, -0.10556041f, -0.07622112f,
1088        -0.09988393f, -0.11453961f, -0.12073903f, -0.09412795f, -0.07146588f,
1089        -0.04054537f, -0.06127083f, 0.04221122f, 0.07688113f, 0.04099256f,
1090        0.12663734f, 0.14683802f, 0.21761774f, 0.12525328f, 0.18431792f,
1091        -1.66402373e-003f, 2.37777247e-003f, 0.01445475f, 0.03509416f,
1092        0.02654697f, 0.01716739f, 0.05374011f, 0.02944174f, 0.11323927f,
1093        -0.01485456f, -0.01611330f, -1.85554172e-003f, -0.01708549f,
1094        -0.05435753f, -0.05302101f, 0.05260378f, -0.03582945f,
1095        -3.42867890e-004f, 1.36076682e-003f, -0.04436073f, -0.04228432f,
1096        0.03281291f, -0.05480836f, -0.10197772f, -0.07206279f, -0.10741059f,
1097        -0.02366946f, 0.10278475f, -2.74783419e-003f, -0.03242477f,
1098        0.02308955f, 0.02835869f, 0.10348799f, 0.19580358f, 0.10252027f,
1099        0.08039929f, 0.05525554f, -0.13250865f, -0.14395352f, 3.13586881e-003f,
1100        -0.03387071f, 8.94669443e-003f, 0.05406157f, -4.97324532e-003f,
1101        -0.01189114f, 2.82919413e-004f, -0.03901557f, -0.04898705f,
1102        0.02164520f, -0.01382906f, -0.01850416f, 0.01869347f, -0.02450060f,
1103        0.02291678f, 0.08196463f, 0.03309153f, -0.10629974f, 0.02473924f,
1104        0.05344394f, -0.02404823f, -0.03243643f, -5.55244600e-003f,
1105        -0.08009996f, 0.02811539f, 0.04235742f, 0.01859004f, 0.04902123f,
1106        -0.01438252f, -0.01526853f, 0.02044195f, -0.05008660f, 0.04244113f,
1107        0.07611816f, 0.04950470f, -0.06020549f, -4.26026015e-003f, 0.13133512f,
1108        -0.01438738f, -0.01958807f, -0.04044152f, -0.12425045f,
1109        2.84353318e-003f, -0.05042776f, -0.09121484f, 7.34345755e-003f,
1110        0.09388847f, 0.11800314f, 4.72295098e-003f, 4.44378285e-003f,
1111        -0.07984917f, -0.03613737f, 0.04490915f, -0.02246483f, 0.04681071f,
1112        0.05240871f, 0.02157206f, -0.04603431f, -0.01197929f, -0.02748779f,
1113        0.13621049f, 0.08812155f, -0.07802048f, 4.86458559e-003f, -0.01598836f,
1114        0.01024450f, -0.03463517f, -0.02304239f, -0.08692665f, 0.06655128f,
1115        0.05785803f, -0.12640759f, 0.02307472f, 0.07337402f, 0.07525434f,
1116        0.04943763f, -0.02241034f, -0.09978238f, 0.14487994f, -0.06570521f,
1117        -0.07855482f, 0.02830222f, -5.29603509e-004f, -0.04669895f,
1118        -0.11822784f, -0.12246452f, -0.15365660f, -0.02969127f, 0.08078201f,
1119        0.13512598f, 0.11505685f, 0.04740673f, 0.01376022f, -0.05852978f,
1120        -0.01537809f, -0.05541119f, 0.02491065f, -0.02870786f, 0.02760978f,
1121        0.23836176f, 0.22347429f, 0.10306466f, -0.06919070f, -0.10132039f,
1122        -0.20198342f, -0.05040560f, 0.27163076f, 0.36987007f, 0.34540465f,
1123        0.29095781f, 0.05649706f, 0.04125737f, 0.07505883f, -0.02737836f,
1124        -8.43431335e-003f, 0.07368195f, 0.01653876f, -0.09402955f,
1125        -0.09574359f, 0.01474337f, -0.07128561f, -0.03460737f, 0.11438941f,
1126        0.13752601f, -0.06385452f, -0.06310338f, 8.19548313e-003f, 0.11622470f,
1127        5.05133113e-003f, -0.07602754f, 0.06695660f, 0.25723928f, 0.09037900f,
1128        0.28826267f, 0.13165380f, -0.05312614f, -0.02137198f, -0.03442232f,
1129        -0.06255679f, 0.03899667f, 0.18391028f, 0.26016650f, 0.03374462f,
1130        0.01860465f, 0.19077586f, 0.18160543f, 3.43634398e-003f, -0.03036782f,
1131        0.19683038f, 0.35378191f, 0.24968483f, -0.03222649f, 0.28972381f,
1132        0.43091634f, 0.30778357f, 0.02335266f, -0.09877399f, -6.85245218e-003f,
1133        0.08945240f, -0.08150686f, 0.02792493f, 0.24806842f, 0.17338486f,
1134        0.06231801f, -0.10432383f, -0.16653322f, -0.13197899f, -0.08531576f,
1135        -0.19271527f, -0.13536365f, 0.22240199f, 0.39219588f, 0.26597717f,
1136        -0.01231649f, 0.01016179f, 0.13379875f, 0.12018334f, -0.04852953f,
1137        -0.07915270f, 0.07036012f, 3.87723115e-003f, -0.06126805f,
1138        -0.15015170f, -0.11406515f, -0.08556531f, -0.07429333f, -0.16115491f,
1139        0.13214062f, 0.25691369f, 0.05697750f, 0.06861912f, -6.02903729e-003f,
1140        -7.94562511e-003f, 0.04799571f, 0.06695165f, -0.01926842f, 0.06206308f,
1141        0.13450983f, -0.06381495f, -2.98370165e-003f, -0.03482971f,
1142        7.53991678e-003f, 0.03895611f, 0.11464261f, 0.01669971f,
1143        8.27818643e-003f, -7.49160210e-003f, -0.11712562f, -0.10650621f,
1144        -0.10353880f, -0.04994106f, -7.65618810e-004f, 0.03023767f,
1145        -0.04759270f, -0.07302686f, -0.05825012f, -0.13156348f, -0.10639747f,
1146        -0.19393684f, -0.09973683f, -0.07918908f, 4.63177625e-004f,
1147        -6.61382044e-004f, 0.15853868f, 0.08561199f, -0.07660093f,
1148        -0.08015265f, -0.06164073f, 0.01882577f, -7.29908410e-004f,
1149        0.06840892f, 0.03843764f, 0.20274927f, 0.22028814f, -5.26101235e-003f,
1150        0.01452435f, -0.06331623f, 0.02865064f, 0.05673740f, 0.12171564f,
1151        0.03837196f, 0.03555467f, -0.02662914f, -0.10280123f, -0.06526285f,
1152        -0.11066351f, -0.08988424f, -0.10103678f, 8.10526591e-003f,
1153        5.95238712e-003f, 0.02617721f, -0.01705742f, -0.10897956f,
1154        -0.08004991f, -0.11271993f, -0.06185647f, -0.06103712f, 0.01597041f,
1155        -0.05923606f, 0.09410726f, 0.22858568f, 0.03263380f, 0.06772990f,
1156        -0.09003516f, 0.01017870f, 0.01931688f, 0.08628357f, -0.01430009f,
1157        0.10954945f, 0.16612452f, -0.02434544f, -0.03310068f, -0.04236627f,
1158        0.01212392f, -6.15046406e-003f, 0.06954194f, 0.03015283f, 0.01787957f,
1159        0.02781667f, -0.05561153f, -8.96244217e-003f, -0.04971489f,
1160        0.07510284f, 0.01775282f, 0.05889897f, -0.07981427f, 0.03647643f,
1161        -3.73833324e-003f, -0.08894575f, -0.06429435f, -0.08068276f,
1162        0.03567704f, -0.07131936f, -7.21910037e-003f, -0.09566668f,
1163        0.17886090f, 0.14911725f, 0.02070032f, -0.05017120f, -0.04992622f,
1164        0.01570143f, -0.09906903f, 0.06456193f, 0.15329507f, 0.18820767f,
1165        0.11689861f, -0.01178513f, -0.02225163f, -0.01905318f, 0.10271224f,
1166        -7.27029052e-003f, 0.11664233f, 0.14796902f, 0.07771893f, 0.02400013f,
1167        -0.05361797f, -0.01972888f, 0.01376177f, 0.06740040f, -0.06525395f,
1168        0.05726178f, -0.02404981f, -0.14018567f, -0.02074987f, -0.04621970f,
1169        -0.04688627f, -0.01842059f, 0.07722727f, -0.04852883f, 0.01529004f,
1170        -0.19639495f, 0.10817073f, 0.03795860f, -0.09435206f, -0.07984378f,
1171        -0.03383440f, 0.11081333f, 0.02237366f, 0.12703256f, 0.21613893f,
1172        0.02918790f, 4.66472283e-003f, -0.10274266f, -0.04854131f,
1173        -3.46305710e-003f, 0.08652268f, 0.02251546f, 0.09636052f, 0.17180754f,
1174        -0.09272388f, 4.59174305e-004f, -0.11723048f, -0.12210111f,
1175        -0.15547538f, 0.07218186f, -0.05297846f, 0.03779940f, 0.05150875f,
1176        -0.03802310f, 0.03870645f, -0.15250699f, -0.08696499f, -0.02021560f,
1177        0.04118926f, -0.15177974f, 0.01577647f, 0.10249301f, 7.50041893e-003f,
1178        0.01721806f, -0.06828983f, -0.02397596f, -0.06598977f, -0.04317593f,
1179        -0.08064980f, 6.66632550e-003f, 0.03333484f, 0.07093620f, 0.08231064f,
1180        -0.06577903f, -0.06698844f, -0.06984019f, -0.06508023f, -0.14145090f,
1181        -0.02393239f, 0.06485303f, 8.83263443e-003f, 0.09251080f, -0.07557579f,
1182        -0.05067699f, -0.09798748f, -0.06703258f, -0.14056294f, 0.03245994f,
1183        0.12554143f, 0.01761621f, 0.12980327f, -0.04081950f, -0.11906909f,
1184        -0.14813015f, -0.08376863f, -0.12200681f, 0.04988137f, 0.05424247f,
1185        -3.90952639e-003f, 0.03255733f, -0.12717837f, -0.07461493f,
1186        -0.05703964f, -0.01736189f, -0.08026433f, -0.05433894f, -0.01719359f,
1187        0.02886275f, 0.01772653f, -0.09163518f, 3.57789593e-003f, -0.10129993f,
1188        -0.02653764f, -0.08131415f, -0.03847986f, -7.62157550e-004f,
1189        0.06486648f, 0.19675669f, -0.04919156f, -0.07059129f, -0.04857785f,
1190        -0.01042383f, -0.08328653f, 0.03660302f, -0.03696846f, 0.04969259f,
1191        0.08241162f, -0.12514858f, -0.06122676f, -0.03750202f,
1192        6.52989605e-003f, -0.10247213f, 0.02568346f, 4.51781414e-003f,
1193        -0.03734229f, -0.01131264f, -0.05412074f, 8.89345480e-004f,
1194        -0.12388977f, -0.05959237f, -0.12418608f, -0.06151643f, -0.07310260f,
1195        0.02441575f, 0.07023528f, -0.07548289f, -7.57147965e-004f,
1196        -0.09061348f, -0.08112976f, -0.06920306f, 9.54394229e-003f,
1197        -0.01219902f, 1.21273217e-003f, -8.88989680e-003f, -0.08309301f,
1198        -0.04552661f, -0.10739882f, -0.05691034f, -0.13928030f, 0.09027749f,
1199        0.15123098f, 0.03175976f, 0.17763577f, 3.29913251e-004f, 0.05151888f,
1200        -0.09844074f, -0.09475287f, -0.08571247f, 0.16241577f, 0.19336018f,
1201        8.57454538e-003f, 0.11474732f, -0.01493934f, 0.03352379f, -0.08966240f,
1202        -0.02322310f, 0.02663568f, 0.05448750f, -0.03536883f, -0.07210463f,
1203        -0.06807277f, -0.03121621f, -0.05932408f, -0.17282860f, -0.15873498f,
1204        -0.04956378f, 0.01603377f, -0.12385946f, 0.13878587f, 0.21468069f,
1205        0.13510075f, 0.20992437f, 0.08845878f, 0.08104013f, 0.03754176f,
1206        0.12173114f, 0.11103114f, 0.10643122f, 0.13941477f, 0.11640384f,
1207        0.14786847f, 0.01218238f, 0.01160753f, 0.03547940f, 0.08794311f,
1208        -0.01695384f, -0.07692261f, -0.08236158f, 6.79194089e-003f,
1209        -0.02458403f, 0.13022894f, 0.10953187f, 0.09857773f, 0.04735930f,
1210        -0.04353498f, -0.15173385f, -0.17904443f, -0.10450364f, -0.13418166f,
1211        -0.06633098f, -0.03170381f, -0.06839000f, -0.11350126f, -0.06983913f,
1212        0.19083543f, 0.17604128f, 0.07730632f, 0.10022651f, 0.36428109f,
1213        0.28291923f, 0.12688625f, 0.15942036f, 0.14064661f, -0.11201853f,
1214        -0.13969108f, -0.09088077f, -0.14107047f, 0.05117374f,
1215        -2.63348082e-003f, -0.10794610f, -0.09715455f, -0.05284977f,
1216        0.01565668f, 0.05031200f, 0.07021113f, -0.02963028f, 0.01766960f,
1217        0.08333644f, -0.03211382f, 4.90096770e-003f, 0.05186674f, -0.05045737f,
1218        -0.09624767f, -0.02525997f, 0.06916669f, 0.01213916f, 0.05333899f,
1219        -0.03443280f, -0.10055527f, -0.06291115f, 5.42851724e-003f,
1220        -6.30360236e-003f, 0.02270257f, -0.01769792f, 0.03273688f, 0.07746078f,
1221        7.77099328e-003f, 0.05041346f, 0.01648103f, -0.02321534f, -0.09930186f,
1222        -0.02293853f, 0.02034990f, -0.08324204f, 0.08510064f, -0.03732836f,
1223        -0.06465405f, -0.06086946f, 0.13680504f, -0.11469388f, -0.03896406f,
1224        -0.07142810f, 2.67581246e-003f, -0.03639632f, -0.09849060f,
1225        -0.11014334f, 0.17489147f, 0.17610909f, -0.16091567f, -0.07248894f,
1226        0.01567141f, 0.23742996f, 0.07552249f, -0.06270349f, -0.07303379f,
1227        0.25442186f, 0.16903116f, -0.08168741f, -0.05913896f, -0.03954096f,
1228        6.81776879e-003f, -0.05615319f, -0.07303037f, -0.12176382f,
1229        0.12385108f, 0.22084464f, -0.05543206f, -0.03310431f, 0.05731593f,
1230        0.19481890f, 0.04016430f, -0.06480758f, -0.12353460f, 0.18733442f,
1231        -0.09631214f, -0.11192076f, 0.12404587f, 0.15671748f, 0.19256128f,
1232        0.10895617f, 0.03391477f, -0.13032004f, -0.05626907f, -0.09025607f,
1233        0.23485197f, 0.27812332f, 0.26725492f, 0.07255980f, 0.16565137f,
1234        0.22388470f, 0.07441066f, -0.21003133f, -0.08075339f, -0.15031935f,
1235        0.07023834f, 0.10872041f, 0.18156518f, 0.20037253f, 0.13571967f,
1236        -0.11915682f, -0.11131983f, -0.18878011f, 0.06074620f, 0.20578890f,
1237        0.12413109f, 0.03930207f, 0.29176015f, 0.29502738f, 0.27856228f,
1238        -0.01803601f, 0.16646385f, 0.19268319f, 0.01900682f, 0.06026287f,
1239        2.35868432e-003f, 0.01558199f, 0.02707230f, 0.11383014f, 0.12103992f,
1240        0.03907350f, 0.04637353f, 0.09020995f, 0.11919726f, -3.63007211e-003f,
1241        0.02220155f, 0.10336831f, 0.17351882f, 0.12259731f, 0.18983354f,
1242        0.15736865f, 0.01160725f, -0.01690723f, -9.69582412e-004f, 0.07213813f,
1243        0.01161613f, 0.17864859f, 0.24486147f, 0.18208991f, 0.20177495f,
1244        0.05972528f, -8.93934630e-003f, -0.02316955f, 0.14436610f, 0.14114498f,
1245        0.05520950f, 0.06353590f, -0.19124921f, 0.10174713f, 0.29414919f,
1246        0.26448128f, 0.09344960f, 0.15284036f, 0.19797507f, 0.11369792f,
1247        -0.12722753f, -0.21396367f, -0.02008235f, -0.06566695f, -0.01662150f,
1248        -0.03937003f, 0.04778343f, 0.05017274f, -0.02299062f, -0.20208496f,
1249        -0.06395898f, 0.13721776f, 0.22544557f, 0.14888357f, 0.08687132f,
1250        0.27088094f, 0.32206613f, 0.09782200f, -0.18523243f, -0.17232181f,
1251        -0.01041531f, 0.04008654f, 0.04199702f, -0.08081299f, -0.03755421f,
1252        -0.04809646f, -0.05222081f, -0.21709201f, -0.06622940f, 0.02945281f,
1253        -0.04600435f, -0.05256077f, -0.08432942f, 0.02848100f, 0.03490564f,
1254        8.28621630e-003f, -0.11051246f, -0.11210597f, -0.01998289f,
1255        -0.05369405f, -0.08869293f, -0.18799506f, -0.05436598f, -0.05011634f,
1256        -0.05419716f, -0.06151857f, -0.10827805f, 0.04346735f, 0.04016083f,
1257        0.01520820f, -0.12173316f, -0.04880285f, -0.01101406f, 0.03250847f,
1258        -0.06009551f, -0.03082932f, -0.02295134f, -0.06856834f, -0.08775249f,
1259        -0.23793389f, -0.09174541f, -0.05538322f, -0.04321031f, -0.11874759f,
1260        -0.04221844f, -0.06070468f, 0.01194489f, 0.02608565f, -0.03892140f,
1261        -0.01643151f, -0.02602034f, -0.01305472f, 0.03920100f, -0.06514261f,
1262        0.01126918f, -6.27710763e-003f, -0.02720047f, -0.11133634f,
1263        0.03300330f, 0.02398472f, 0.04079665f, -0.10564448f, 0.05966159f,
1264        0.01195221f, -0.03179441f, -0.01692590f, -0.06177841f, 0.01841576f,
1265        -5.51078189e-003f, -0.06821765f, -0.03191888f, -0.09545476f,
1266        0.03030550f, -0.04896152f, -0.02914624f, -0.13283344f, -0.04783419f,
1267        6.07836898e-003f, -0.01449538f, -0.13358212f, -0.09687774f,
1268        -0.02813793f, 0.01213498f, 0.06650011f, -0.02039067f, 0.13356198f,
1269        0.05986415f, -9.12760664e-003f, -0.18780160f, -0.11992817f,
1270        -0.06342237f, 0.01229534f, 0.07143231f, 0.10713009f, 0.11085765f,
1271        0.06569190f, -0.02956399f, -0.16288325f, -0.13993549f, -0.01292515f,
1272        0.03833013f, 0.09130384f, -0.05086257f, 0.05617329f, -0.03896667f,
1273        -0.06282311f, -0.11490010f, -0.14264110f, -0.04530499f, 0.01598189f,
1274        0.09167797f, 0.08663294f, 0.04885277f, -0.05741219f, -0.07565769f,
1275        -0.17136464f, -0.02619422f, -0.02477579f, 0.02679587f, 0.11621952f,
1276        0.08788391f, 0.15520640f, 0.04709549f, 0.04504483f, -0.10214074f,
1277        -0.12293372f, -0.04820546f, -0.05484834f, 0.05473754f, 0.07346445f,
1278        0.05577277f, -0.08209965f, 0.03462975f, -0.20962234f, -0.09324598f,
1279        3.79481679e-003f, 0.03617633f, 0.16742408f, 0.07058107f, 0.10204960f,
1280        -0.06795346f, 3.22807301e-003f, -0.12589309f, -0.17496960f,
1281        0.02078314f, -0.07694324f, 0.12184640f, 0.08997164f, 0.04793497f,
1282        -0.11383379f, -0.08046359f, -0.25716835f, -0.08080962f,
1283        6.80711539e-003f, -0.02930280f, -3.04938294e-003f, -0.11106286f,
1284        -0.04628860f, -0.07821649f, 7.70127494e-003f, -0.10247706f,
1285        1.21042714e-003f, 0.20573859f, -0.03241005f, 8.42972286e-003f,
1286        0.01946464f, -0.01197973f, -0.14579976f, 0.04233614f,
1287        -4.14096704e-003f, -0.06866436f, -0.02431862f, -0.13529138f,
1288        1.25891645e-003f, -0.11425111f, -0.04303651f, -0.01694815f,
1289        0.05720210f, -0.16040207f, 0.02772896f, 0.05498345f, -0.15010567f,
1290        0.01450866f, 0.02350303f, -0.04301004f, -0.04951802f, 0.21702233f,
1291        -0.03159155f, -0.01963303f, 0.18232647f, -0.03263875f,
1292        -2.88476888e-003f, 0.01587562f, -1.94303901e-003f, -0.07789494f,
1293        0.04674156f, -6.25576358e-003f, 0.08925962f, 0.21353747f, 0.01254677f,
1294        -0.06999976f, -0.05931328f, -0.01884327f, -0.04306272f, 0.11794136f,
1295        0.03842728f, -0.03907030f, 0.05636114f, -0.09766009f, -0.02104000f,
1296        8.72711372e-003f, -0.02736877f, -0.05112274f, 0.16996814f, 0.02955785f,
1297        0.02094014f, 0.08414304f, -0.03335762f, -0.03617457f, -0.05808248f,
1298        -0.08872101f, 0.02927705f, 0.27077839f, 0.06075108f, 0.07478261f,
1299        0.15282831f, -0.03908454f, -0.05101782f, -9.51998029e-003f,
1300        -0.03272416f, -0.08735625f, 0.07633440f, -0.07185312f, 0.13841286f,
1301        0.07812646f, -0.12901451f, -0.05488589f, -0.05644578f, -0.03290703f,
1302        -0.11184757f, 0.03751570f, -0.05978153f, -0.09155276f, 0.05657315f,
1303        -0.04328186f, -0.03047933f, -0.01413135f, -0.10181040f, -0.01384013f,
1304        0.20132534f, -0.01536873f, -0.07641169f, 0.05906778f, -0.07833145f,
1305        -0.01523801f, -0.07502609f, -0.09461885f, -0.15013233f, 0.16050665f,
1306        0.09021381f, 0.08473236f, 0.03386267f, -0.09147339f, -0.09170618f,
1307        -0.08498498f, -0.05119187f, -0.10431040f, 0.01041618f, -0.03064913f,
1308        0.09340212f, 0.06448522f, -0.03881054f, -0.04985436f, -0.14794017f,
1309        -0.05200112f, -0.02144495f, 0.04000821f, 0.12420804f, -0.01851651f,
1310        -0.04116732f, -0.11951703f, -0.04879033f, -0.08722515f, -0.08454733f,
1311        -0.10549165f, 0.11251976f, 0.10766345f, 0.19201984f, 0.06128913f,
1312        -0.02734615f, -0.08834923f, -0.16999826f, -0.03548348f,
1313        -5.36092324e-003f, 0.08297954f, 0.07226378f, 0.04194529f, 0.04668673f,
1314        8.73902347e-003f, 0.06980139f, 0.05652480f, 0.05879445f, 0.02477076f,
1315        0.02451423f, 0.12433673f, 0.05600227f, 0.06886370f, 0.03863076f,
1316        0.07459056f, 0.02264139f, 0.01495469f, 0.06344220f, 0.06945208f,
1317        0.02931899f, 0.11719371f, 0.04527427f, 0.03248192f, 2.08271481e-003f,
1318        0.02044626f, 0.11403449f, 0.04303892f, 0.06444661f, 0.04959024f,
1319        0.08174094f, 0.09240247f, 0.04894639f, 0.02252937f, -0.01652530f,
1320        0.07587013f, 0.06064249f, 0.13954395f, 0.02772832f, 0.07093039f,
1321        0.08501238f, 0.01701301f, 0.09055722f, 0.33421436f, 0.20163782f,
1322        0.09821030f, 0.07951369f, 0.08695120f, -0.12757730f, -0.13865978f,
1323        -0.06610068f, -0.10985506f, 0.03406816f, -0.01116336f, -0.07281768f,
1324        -0.13525715f, -0.12844718f, 0.08956250f, 0.09171610f, 0.10092317f,
1325        0.23385370f, 0.34489515f, 0.09901748f, 0.02002922f, 0.12335990f,
1326        0.07606190f, -0.14899330f, -0.15634622f, -0.06494618f, -0.01760547f,
1327        0.03404277f, -0.13208845f, -0.12101169f, -0.18294574f, -0.16560709f,
1328        0.02183887f, -0.02752613f, 0.01813638f, 0.02000757f, 0.01319924f,
1329        0.08030242f, 0.01220535f, 2.98233377e-003f, -0.01307070f, 0.05970297f,
1330        -0.05345284f, -0.03381982f, -9.87543724e-003f, -0.06869387f,
1331        0.03956730f, -0.03108176f, -0.05732809f, 0.02172386f, 0.04159765f,
1332        2.62783933e-003f, 0.04813229f, 0.09358983f, -8.18389002e-003f,
1333        0.01724574f, -0.02547474f, -0.04967288f, -0.02390376f, 0.06640504f,
1334        -0.06306566f, 0.01137518f, 0.05589378f, -0.08237787f, 0.02455001f,
1335        -0.03059422f, -0.08953978f, 0.06851497f, 0.07190268f, -0.07610799f,
1336        7.87237938e-003f, -7.85830803e-003f, 0.06006952f, -0.01126728f,
1337        -2.85743061e-003f, -0.04772895f, 0.01884944f, 0.15005857f,
1338        -0.06268821f, -0.01989072f, 0.01138399f, 0.08760451f, 0.03879007f,
1339        -9.66926850e-003f, -0.08012961f, 0.06414555f, -0.01362950f,
1340        -0.09135523f, 0.01755159f, 0.04459474f, 0.09650917f, 0.05219948f,
1341        -2.19440833e-003f, -0.07037939f, -0.01599054f, 0.13103317f,
1342        -0.02492603f, -0.01032540f, -0.02903307f, 0.04489160f, 0.05148086f,
1343        0.01858173f, -0.02919228f, 0.08299296f, -0.04590359f, -0.15745632f,
1344        -0.09068198f, -0.02972453f, 0.12985018f, 0.22320485f, 0.24261914f,
1345        0.03642650f, -0.05506422f, 2.67413049e-003f, -0.03834032f, 0.06449424f,
1346        0.03834866f, 0.03816991f, 0.25039271f, 0.34212017f, 0.32433882f,
1347        0.18824573f, -0.08599839f, -0.17599408f, -0.15317015f, -0.09913155f,
1348        -0.02856072f, -0.05304699f, -1.06437842e-003f, -0.06641813f,
1349        -0.07509298f, 0.01463361f, -0.07551918f, -0.04510373f,
1350        -8.44620075e-003f, 0.01772176f, 0.04068235f, 0.20295307f, 0.15719447f,
1351        0.05712103f, 0.26296997f, 0.14657754f, 0.01547317f, -0.05052776f,
1352        -0.03881342f, -0.01437883f, -0.04930177f, 0.11719568f, 0.24098417f,
1353        0.26468599f, 0.31698579f, 0.10103608f, -0.01096375f, -0.01367013f,
1354        0.17104232f, 0.20065314f, 2.67622480e-003f, -0.01190034f, 0.18301608f,
1355        0.09459770f, -0.06357619f, -0.06473801f, 0.01377906f, -0.10032775f,
1356        -0.06388740f, 3.80393048e-003f, 0.06206078f, 0.10349120f, 0.26804337f,
1357        8.17918684e-003f, -0.02314351f, 9.34422202e-003f, 0.09198381f,
1358        0.03681326f, -8.77339672e-003f, -0.09662418f, -0.02715708f,
1359        0.13503517f, 0.08962728f, -6.57071499e-003f, -0.03201199f, 0.28510824f,
1360        0.32095715f, 0.18512695f, -0.14230858f, -0.14048551f, -0.07181299f,
1361        -0.08575408f, -0.08661680f, -0.17416079f, 7.54326640e-004f,
1362        0.05601677f, 0.13585392f, -0.04960437f, -0.07708392f, 0.10676333f,
1363        -0.04407546f, -0.07209078f, 0.03663663f, 0.28949317f, 0.41127121f,
1364        0.27431169f, -0.06900328f, -0.21474190f, -0.15578632f, -0.19555484f,
1365        -0.15209621f, -0.11269179f, 0.07416003f, 0.18991330f, 0.26858172f,
1366        0.01952259f, 0.01017922f, 0.02159843f, -4.95165400e-003f, -0.04368168f,
1367        -0.12721671f, -0.06673957f, -0.11275250f, 0.04413409f, 0.05578312f,
1368        0.03896771f, 0.03566417f, -0.05871816f, -0.07388090f, -0.17965563f,
1369        -0.08570268f, -0.15273231f, -0.06022318f, -0.06999847f,
1370        -6.81510568e-003f, 0.06294262f, -6.54901436e-004f, -0.01128654f,
1371        -0.02289657f, 0.04849290f, 0.04140804f, 0.23681939f, 0.14545733f,
1372        0.01989965f, 0.12032662f, 3.87463090e-003f, -6.02597650e-003f,
1373        -0.05919775f, -0.03067224f, -0.07787777f, 0.10834727f, 0.02153730f,
1374        0.02765649f, 0.03975543f, -0.12182906f, -0.04900113f, -0.09940100f,
1375        -0.06453611f, -0.13757215f, -0.03721382f, 0.02827376f, -0.04351249f,
1376        0.01907038f, -0.10284120f, -0.05671160f, -0.10760647f, -0.09624009f,
1377        -0.09565596f, -0.01303654f, 0.03080539f, 0.01416511f, 0.05846142f,
1378        -5.42971538e-003f, 0.06221476f, -0.03320325f, -0.06791797f,
1379        -0.05791342f, 0.12851369f, 0.14990346f, 0.03634374f, 0.14262885f,
1380        0.04330391f, 0.05032569f, -0.05631914f, 0.01606137f, 0.04387223f,
1381        0.22344995f, 0.15722635f, -0.04693628f, 0.03006579f, -2.52882647e-003f,
1382        0.05717621f, -0.07529724f, -0.02848588f, -0.06868757f,
1383        -4.51729307e-003f, 0.06466042f, -0.05935378f, -0.04704857f,
1384        -0.07363959f, 0.04843248f, -0.13421375f, -0.09789340f, -0.10255270f,
1385        0.03509852f, 0.04751543f, -0.03822323f, 0.09740467f, 0.04762916f,
1386        0.03940146f, -0.08283259f, 0.09552965f, 0.05038739f, 0.21258622f,
1387        0.09646992f, 0.03241193f, 0.05167701f, 0.04614570f, 0.04330090f,
1388        -0.02671840f, -0.06259909f, -0.02301898f, 0.18829170f, 0.10522786f,
1389        0.04313190f, 0.01670948f, -0.08421925f, 0.05911417f, -0.10582602f,
1390        -0.04855484f, -0.08373898f, 0.07775915f, 0.03723533f, -0.12047344f,
1391        4.86345543e-003f, -0.10520902f, 0.06571782f, -0.07528137f,
1392        -0.03245651f, -0.09869066f, -0.02917477f, -0.18293270f, 0.14810945f,
1393        9.24033765e-003f, -0.04354914f, 0.02266885f, -0.11872729f,
1394        -0.04016589f, 0.02830229f, 0.22539048f, 0.20565644f, 0.16701797f,
1395        0.09019924f, 0.01300652f, 0.09760600f, -0.03675831f, -0.01935448f,
1396        -0.06894835f, 0.08077277f, 0.19047537f, 0.11312226f, 0.04106043f,
1397        -0.11187182f, 0.04312806f, -0.18548580f, -0.11287174f, -0.08794551f,
1398        0.02078281f, -0.15295486f, 0.11806386f, -0.01103218f, -0.15971117f,
1399        0.02153538f, -0.05232147f, -0.10835317f, -0.13910367f, 0.05920752f,
1400        -0.10122602f, 0.20174250f, 0.09105796f, -0.01881348f, 0.09559010f,
1401        -0.03725745f, -0.09442931f, -0.09763174f, 0.05854454f, 0.08287182f,
1402        0.12919849f, 0.08594352f, -2.49806582e-003f, 0.02398440f,
1403        5.67950122e-003f, -0.06296340f, -0.12993270f, 0.03855852f, 0.05186560f,
1404        0.10839908f, -0.03380463f, -0.12654832f, -0.05399339f, -0.07456800f,
1405        -0.04736232f, -0.10164231f, 0.07496139f, 0.08125214f, 0.07656177f,
1406        -0.04999603f, -0.12823077f, -0.07692395f, -0.11317524f, -0.09118655f,
1407        -0.05695669f, 0.10477209f, 0.07468581f, 0.01630048f, -8.00961629e-003f,
1408        -0.06582128f, -0.04019095f, -0.04682907f, -0.01907842f, -0.10997720f,
1409        0.04911406f, 0.02931030f, 0.04197735f, -0.05773980f, -0.09670641f,
1410        -0.03594951f, -0.03402121f, -0.07149299f, -0.10566200f, 0.10601286f,
1411        0.06340689f, -0.01518632f, -5.96402306e-003f, -0.07628012f,
1412        -3.52779147e-003f, -0.02683854f, -0.10265494f, -0.02680815f,
1413        0.16338381f, 0.03103515f, 0.02296976f, 0.01624348f, -0.10831620f,
1414        -0.02314233f, -0.04789969f, -0.05530700f, -0.06461314f, 0.10494506f,
1415        0.04642856f, -0.07592955f, -0.06197905f, -0.09042154f, -0.01445521f,
1416        -0.04297818f, -0.11262015f, -0.11430512f, 0.03174541f, -0.03677487f,
1417        -0.02963996f, -0.06610169f, -0.13292049f, -0.07059067f, -0.08444111f,
1418        -0.02640536f, -0.07136250f, 0.04559967f, 0.01459980f, 0.17989251f,
1419        0.04435328f, -0.12464730f, -0.02871115f, -0.10752209f, -0.03393742f,
1420        -0.03791408f, 0.02548251f, 0.01956050f, 0.19245651f, 0.13963254f,
1421        -0.05904696f, -0.07424626f, -0.10411884f, 1.54176133e-003f,
1422        0.01797429f, 0.13025844f, 0.04547642f, -0.05710349f, -0.10697161f,
1423        -0.13489437f, -0.06515755f, -0.06406886f, -4.08572936e-003f,
1424        -0.01336483f, 0.04368737f, -0.11259720f, -0.05701635f, -0.06469971f,
1425        -0.08346602f, -0.04166770f, -0.05795543f, -0.08247511f, -0.05742628f,
1426        0.08452254f, -0.03350224f, 0.13980860f, 0.13252275f, 0.07589617f,
1427        0.07539988f, 0.12155797f, 0.19087289f, 0.15050751f, 0.21250245f,
1428        0.14206800f, 0.01298489f, 0.07450245f, 0.06559097f, 0.01700557f,
1429        0.04512971f, 0.16950700f, 0.10261577f, 0.16389982f, 0.05505059f,
1430        -0.03453077f, 0.08622462f, 0.07935954f, 0.03976260f, 0.02036091f,
1431        3.95744899e-003f, 0.03267065f, 0.15235919f, 0.01297494f, -0.08109194f,
1432        0.01407558f, 4.40693414e-003f, -0.15157418f, -0.11390478f,
1433        -0.07487597f, -7.81322457e-003f, -0.02749545f, -0.10181408f,
1434        0.13755716f, 0.14007211f, 0.13482562f, 0.27517235f, 0.34251109f,
1435        0.07639657f, 0.07268607f, 0.19823882f, 0.16135791f, -0.04186463f,
1436        -0.12784107f, -0.09846287f, 0.03169041f, 0.10974082f, -0.15051922f,
1437        -0.08916726f, -0.07138767f, -0.04153349f, 6.25418453e-003f,
1438        0.01266654f, 0.10533249f, 0.12749144f, 0.15148053f, 0.01498513f,
1439        0.06305949f, -0.01247123f, -0.08778401f, -0.08551880f, -0.11955146f,
1440        -0.08493572f, -0.02901620f, -0.02394859f, -0.13427313f, -0.11053200f,
1441        -0.14413260f, -0.15203285f, 0.03972760f, -3.72127310e-004f,
1442        -0.04200919f, 0.06105104f, 0.01904975f, -0.01106191f,
1443        -7.27445772e-003f, -0.01520341f, 1.10228511e-003f, -0.04949187f,
1444        -0.08013099f, 5.72071038e-003f, 0.08415454f, -0.06523152f, 0.03664081f,
1445        -0.02673042f, -0.12066154f, -0.03702074f, 0.06006580f, 0.01628682f,
1446        -6.17772620e-003f, 0.08192339f, -3.41629819e-003f, 0.02870512f,
1447        0.05807141f, 0.04959986f, 0.04618251f, -0.04901629f, -0.10579574f,
1448        0.02274442f, 0.12070961f, 2.23597488e-003f, 0.09831765f, -0.03019848f,
1449        -0.11181970f, -0.04961075f, 0.02498928f, -0.03714991f, -0.01619653f,
1450        0.02643486f, -7.62964319e-003f, -0.02882290f, -0.06242594f,
1451        -0.08439861f, 0.07220893f, 0.07263952f, 0.01561574f, 0.03091968f,
1452        0.01708712f, -0.03797151f, -3.18561122e-003f, 0.01624021f,
1453        -0.02828573f, 0.11284444f, -1.32280716e-003f, -0.07784860f,
1454        -0.07209100f, 0.03372242f, 0.12154529f, 0.02278104f, -0.05275500f,
1455        -0.01918484f, 0.12989293f, 0.05424401f, 0.02333086f, 0.04029022f,
1456        0.12392918f, 0.09495489f, 0.09190340f, 0.07935889f, 8.76816828e-003f,
1457        0.17148446f, -8.51302687e-003f, -0.08011249f, -0.06796283f,
1458        0.04884845f, 0.01112272f, -0.07835306f, -1.14811445e-003f,
1459        -0.03440760f, 0.02845243f, 0.07695542f, -0.07069533f, -0.01151784f,
1460        -8.53884313e-003f, -0.01662786f, -0.04163864f, 0.05400505f,
1461        0.02859163f, 0.02921852f, 0.05003135f, -6.85718050e-003f, -0.01632611f,
1462        0.07780217f, 0.04042810f, -0.01216440f, 3.60914599e-003f, -0.06322435f,
1463        0.09516726f, 0.12877031f, -9.69162490e-003f, 0.01031179f, 0.05180895f,
1464        -9.34659224e-003f, -0.01644533f, -0.04849347f, -0.04343236f,
1465        0.10514783f, 0.08046635f, -0.04615205f, -0.03975486f, -0.01485525f,
1466        0.13096830f, -0.01517950f, -0.06571898f, -0.04016372f, 0.01849786f,
1467        0.02439670f, 0.08067258f, 1.74824719e-003f, 0.07053747f, 0.08819518f,
1468        -5.08352555e-003f, -0.06550863f, -0.08266170f, -0.07780605f,
1469        0.01453450f, -0.08756890f, 0.01096501f, -8.71319138e-003f, 0.10110464f,
1470        0.02420769f, -0.06708383f, 0.02007811f, 5.93133038e-003f, 0.05398923f,
1471        0.07538138f, 0.02049227f, 0.02242589f, 0.04011070f, -1.44875818e-003f,
1472        -4.19115182e-003f, 0.06367654f, 0.02506934f, 0.02434536f, 0.05879405f,
1473        -8.22952855e-003f, -0.01242441f, 0.04224926f, -0.01754923f,
1474        0.05958161f, 0.03818886f, -0.01830363f, -0.04308917f, -0.04422197f,
1475        -0.02432721f, 0.02264866f, 2.03751423e-003f, 0.01197031f, 0.04439203f,
1476        0.12169247f, 0.03602713f, -0.02599251f, -1.98226492e-003f, 0.02046336f,
1477        -0.02639058f, -1.91242550e-003f, -0.09334669f, -0.03595153f,
1478        -9.88179818e-003f, -0.06848445f, -0.04666303f, -0.09955736f,
1479        -0.04206430f, 0.02609075f, 9.09005292e-003f, -0.07138551f,
1480        -4.22313227e-004f, 0.01766645f, 0.02756404f, 0.01308276f, 0.04052891f,
1481        0.02387515f, 0.05337298f, 0.02500631f, -0.04970853f, -0.12467445f,
1482        0.17604403f, 0.12256411f, -0.07512254f, 8.70451052e-003f, -0.05697548f,
1483        -0.03626474f, -8.76623299e-003f, -0.01210897f, -0.09451522f,
1484        0.07490732f, -0.02008001f, -0.02681278f, -0.06463405f, -0.01517507f,
1485        7.33757764e-003f, 6.07147906e-003f, -0.09316964f, -0.04575328f,
1486        0.13261597f, 0.15424870f, -0.01655918f, -0.02772390f, -0.05243644f,
1487        -0.02356456f, -0.02351753f, -0.10211615f, -0.12873036f, 0.14549787f,
1488        0.12519856f, 4.38762689e-003f, 0.02795992f, 0.05170322f, 0.09223596f,
1489        0.05890015f, 0.02376701f, -0.02777346f, 0.09506908f, 0.02328936f,
1490        -0.02319928f, -0.03218696f, -0.01527841f, -0.01016694f, -0.02674719f,
1491        0.05137179f, 0.01980666f, 0.06544447f, -0.01746171f, 0.01026380f,
1492        0.01561806f, 7.97004555e-004f, 0.07601810f, 0.01907250f, -0.03083035f,
1493        -0.05987392f, 0.09242783f, 0.14555025f, 0.01035827f, 0.03092401f,
1494        -0.09562709f, -0.03802354f, 0.02531144f, 0.03079449f, -0.07100715f,
1495        0.03330721f, -2.69116857e-003f, 0.03167490f, 0.05744999f, 0.03259895f,
1496        1.91266940e-003f, 0.03194578f, 0.07389776f, 0.02198060f, 0.07633314f,
1497        0.03293105f, -0.09103648f, 0.04718142f, 0.06102672f, -0.01003063f,
1498        5.85481385e-003f, -0.01522574f, 0.02323526f, 0.10584345f,
1499        4.35879454e-003f, 0.06107873f, 0.05868603f, -0.03115531f, 0.01214679f,
1500        0.08567052f, 3.93926632e-003f, -0.02521488f, -1.88425183e-003f,
1501        0.02038053f, -6.26854831e-004f, 0.04897438f, -0.04280585f,
1502        -0.04819689f, -0.04812867f, -0.01451186f, 0.05101469f,
1503        -9.01125465e-003f, -0.03333859f, 0.03917955f, 0.04196448f, 0.04292135f,
1504        0.02809529f, 0.02999715f, 0.04081348f, 9.10039060e-003f, 0.09703232f,
1505        0.10379741f, 0.02348725f, -4.72756615e-003f, 0.01027325f, 0.10402658f,
1506        0.12071823f, 0.09817299f, -0.02612033f, 0.03638414f, 0.05896405f,
1507        0.04865025f, 0.04793910f, -0.03882321f, -0.02962117f, -0.01222268f,
1508        0.04071597f, 0.01922777f, -0.02287866f, 0.03328381f, 0.01859092f,
1509        0.09024994f, 0.03804455f, -0.01424510f, 0.01953739f, 0.02509617f,
1510        -0.03390914f, -0.05663941f, -0.01641979f, 0.05848591f, 0.04639670f,
1511        0.02092116f, 0.12911791f, 0.19918139f, 0.07739855f, -7.25806039e-003f,
1512        0.04074838f, 0.03183993f, 1.39251316e-003f, -0.01428625f, 0.01865480f,
1513        0.08529541f, 0.13547510f, 0.11189661f, 0.03998901f, 0.09575938f,
1514        -0.02631102f, -0.03458253f, -0.04749985f, -0.06070716f,
1515        4.71884012e-003f, 0.06445789f, -0.02450038f, -0.05483776f,
1516        -0.04657237f, -0.02030717f, -0.03480766f, -0.09397731f, -0.06399718f,
1517        -0.01804585f, 5.62348310e-003f, -6.64811488e-003f, -0.06517869f,
1518        6.96210237e-003f, -0.01860148f, -0.04245830f, -0.05850367f,
1519        -3.24417115e-003f, 0.07700698f, 0.11290991f, 0.09923030f, -0.02970599f,
1520        0.05592411f, 0.04813979f, -0.09811195f, -0.09357996f, -0.03276114f,
1521        0.05218338f, 0.04141375f, 3.92977800e-003f, -0.05047480f, 0.15960084f,
1522        0.04612800f, -0.03114098f, -0.04650044f, -0.03249795f, -0.02425641f,
1523        -0.04311355f, 0.04307659f, -0.09401883f, -0.04742785f, -0.01254499f,
1524        -0.06598741f, 3.41369561e-003f, -0.05620445f, -7.28127593e-003f,
1525        -0.05998361f, -0.03274450f, -0.07376868f, 3.19015374e-003f,
1526        -0.07733069f, 0.05815864f, -0.02471071f, 0.03850617f, 0.13838784f,
1527        0.15399861f, 0.01731321f, -0.01477586f, 0.10393341f, 0.05159833f,
1528        -0.01945555f, -0.03427503f, -0.04867341f, 0.09237480f, 0.10732719f,
1529        0.06071450f, -0.01355071f, 0.01844356f, -0.03480803f, -0.03796671f,
1530        2.15628621e-004f, -0.05440186f, 0.01889855f, -0.01443413f,
1531        -0.02607902f, -0.02938001f, 0.02720689f, -0.06228397f, -0.02970936f,
1532        -0.03426210f, -0.10280876f, -0.06739304f, -0.05227850f, 0.03360292f,
1533        -0.11278441f, -0.06966180f, -0.13937433f, 9.10932291e-003f,
1534        2.52020749e-004f, -4.07359656e-003f, 0.12310639f, 0.09343060f,
1535        0.07302511f, 0.03222093f, 0.07532879f, 0.03792387f, -0.04985180f,
1536        0.01804602f, 0.02694195f, 0.13481498f, 0.04601225f, 0.04106982f,
1537        0.08511057f, 0.12314661f, 0.01320830f, 0.05044121f, -5.52943908e-003f,
1538        -0.08992624f, -0.02249301f, -0.08181777f, 0.06165213f, -0.03256603f,
1539        -0.01068920f, -0.01323473f, -0.11970232f, -0.04616347f, -0.12088681f,
1540        -0.06762606f, -0.08676834f, -0.06434575f, 0.01772529f, 0.03469615f,
1541        -0.10926618f, 0.03013873f, 0.14030397f, 0.16130108f, 0.17985588f,
1542        0.11281928f, 0.10530639f, 0.08905948f, 0.07733764f, 0.06695238f,
1543        0.02142088f, 0.06438877f, 0.09794453f, 0.05745072f, 0.02788557f,
1544        0.02632830f, 0.07985807f, 4.24902979e-003f, 8.47890321e-003f,
1545        -0.02679466f, -5.28812688e-003f, -0.02162580f, -0.07490715f,
1546        -0.08251337f, -0.02056576f, -0.01026194f, -1.15492963e-003f,
1547        -5.75720915e-004f, -0.07210591f, -0.07320981f, -0.04883312f,
1548        -0.10897151f, -0.07477258f, -0.08867134f, -0.09222437f, -0.10924666f,
1549        -0.10430276f, 0.07953499f, 0.02767959f, 0.11393359f, 0.18779543f,
1550        0.03313421f, 0.02143700f, 0.05852016f, -2.12067598e-003f,
1551        -3.76984011e-003f, 0.02774167f, -0.03124610f, 0.01465141f, 0.01616004f,
1552        -0.01391913f, -0.04404102f, -0.05444227f, -0.14684731f, -0.15016587f,
1553        0.04509468f, 1.29563001e-003f, 0.01398350f, 0.05610404f, -0.04868806f,
1554        -0.04776716f, -8.16873740e-003f, -2.30126386e-003f, -0.02286313f,
1555        0.11983398f, -0.04703261f, -0.08814441f, -0.07585249f, -0.10799607f,
1556        -0.03232087f, 0.01509786f, -0.04843464f, -0.03967846f, 0.09589416f,
1557        0.01352560f, -0.01458119f, 0.01050829f, -0.03038946f, 0.01608388f,
1558        1.11975556e-003f, -0.01250656f, 2.86211423e-003f, 0.04333691f,
1559        -0.14603497f, -0.01946543f, -0.02327525f, -0.01973944f, 0.07944400f,
1560        -0.02224544f, -0.06701808f, 0.03476532f, 0.11505594f, -0.02712801f,
1561        -0.01665113f, 0.06315716f, -0.08205860f, 0.07431999f, 0.04915778f,
1562        -0.04468752f, -0.01490402f, 0.07400476f, -0.11650901f, 0.05102430f,
1563        0.04559118f, -0.05916039f, 0.08840760f, -0.01587902f, -0.14890194f,
1564        0.07857784f, 0.04710254f, -0.05381983f, -0.07331945f, -0.03604643f,
1565        0.15611970f, 0.07649943f, -0.05959348f, -0.02776607f, 0.11098688f,
1566        0.03758875f, -0.04446875f, 0.04933187f, 0.01345535f, 0.06921103f,
1567        0.07364785f, 0.05518956f, 0.02899585f, 0.09375840f, 0.10518434f,
1568        -0.04420241f, 0.01915282f, -3.56386811e-003f, 0.14586878f, 0.10286101f,
1569        -0.04360626f, -0.12723237f, 0.09076386f, 0.11119842f, -0.06035013f,
1570        0.09674817f, 0.08938243f, 0.07065924f, 0.02603180f, 5.84815582e-003f,
1571        -0.05922065f, 0.12360309f, 3.59695964e-003f, 2.99844006e-003f,
1572        0.03697936f, 0.02043072f, 0.04168725f, 0.01025975f, -0.01359980f,
1573        -0.01600920f, 0.02581056f, 0.02329250f, 2.98100687e-003f, 0.01629762f,
1574        0.06652115f, 0.05855627f, 0.01237463f, -0.01297135f, 0.01761587f,
1575        0.05090865f, 0.06549342f, -0.04425945f, 2.43203156e-003f,
1576        3.07327788e-003f, 0.06678630f, -0.04303836f, 0.01082393f, -0.06476044f,
1577        0.04077786f, 0.12441979f, 0.08237778f, 0.07424165f, 0.04065890f,
1578        0.06905543f, 0.09556347f, 0.12724875f, -0.02132082f, 0.08514154f,
1579        -0.04175328f, -0.02666954f, 0.01897836f, 0.03317382f, 9.45465732e-003f,
1580        -0.01238974f, -0.04242500f, -0.01419479f, -0.03545213f, -0.02440874f,
1581        0.08684119f, 0.04212951f, 0.02462858f, -0.01104825f, -5.01706870e-003f,
1582        0.02968982f, 0.02597476f, -0.01568939f, 0.04514892f, 0.06974549f,
1583        0.08670278f, 0.06828108f, 0.10238872f, 0.05405957f, 0.06548470f,
1584        -0.03763957f, 0.01366090f, 0.07069602f, 0.05363748f, 0.04798120f,
1585        0.11706422f, 0.05466456f, -0.01869259f, 0.06344382f, 0.03106543f,
1586        0.08432506f, -0.02061096f, 0.03821088f, -6.92190882e-003f,
1587        6.40467042e-003f, -0.01271779f, 6.89014705e-005f, 0.04541415f,
1588        -0.01899539f, -0.05020239f, 0.03000903f, 0.01090422f, 4.52452758e-003f,
1589        0.02573632f, -0.02388454f, -0.04200457f, 1.72783900e-003f,
1590        -0.05978370f, -0.02720562f, 0.06573715f, 0.01154317f, 0.01265615f,
1591        0.07375994f, -9.19828378e-003f, -0.04914120f, 0.02124831f, 0.06455322f,
1592        0.04372910f, -0.03310043f, 0.03605788f, -6.78055827e-003f,
1593        9.36202332e-003f, 0.01747596f, -0.06406314f, -0.06812935f, 0.08080816f,
1594        -0.02778088f, 0.02735260f, 0.06393493f, 0.06652229f, 0.05676993f,
1595        0.08640018f, -7.59188086e-003f, -0.02012847f, -0.04741159f,
1596        -0.01657069f, -0.01624399f, 0.05547778f, -2.33309763e-003f,
1597        0.01120033f, 0.06141156f, -0.06285004f, -0.08732341f, -0.09313398f,
1598        -0.04267832f, 5.57443965e-003f, 0.04809862f, 0.01773641f,
1599        5.37361018e-003f, 0.14842421f, -0.06298012f, -0.02935147f, 0.11443478f,
1600        -0.05034208f, 5.65494271e-003f, 0.02076526f, -0.04577984f,
1601        -0.04735741f, 0.02961071f, -0.09307127f, -0.04417921f, -0.04990027f,
1602        -0.03940028f, 0.01306016f, 0.06267900f, 0.03758737f, 0.08460117f,
1603        0.13858789f, 0.04862388f, -0.06319809f, -0.05655516f, 0.01885816f,
1604        -0.03285607f, 0.03371567f, -0.07040928f, -0.04514049f, 0.01392166f,
1605        0.08184422f, -0.07230316f, 0.02386871f, 0.02184591f, 0.02605764f,
1606        -0.01033954f, 9.29878280e-003f, 7.67351175e-003f, 0.15189242f,
1607        0.02069071f, -0.09738296f, -0.08894105f, -0.07768748f, 0.02332268f,
1608        -0.01778995f, -0.03258888f, -0.08180822f, -0.08492987f, 0.02290156f,
1609        -0.11368170f, -0.03554465f, -0.04533844f, -0.02861580f, 0.06782424f,
1610        0.01113123f, 0.02453644f, 0.12721945f, 0.08084814f, -0.03607795f,
1611        0.01109122f, 0.04803548f, -0.03489929f, 0.03399536f, -0.05682014f,
1612        8.59533902e-003f, -4.27904585e-003f, 0.03230887f, -0.01300198f,
1613        -0.01038137f, -0.07930113f, 8.33097473e-003f, 0.02296994f,
1614        -0.01306500f, -0.01881626f, 0.04413369f, 0.05729880f, -0.03761553f,
1615        0.01942326f, 1.64540811e-003f, -0.03811319f, 0.04190650f, -0.14978096f,
1616        -0.04514487f, 0.01209545f, -5.46460645e-003f, -0.01647195f,
1617        7.63064111e-003f, -0.07494587f, 0.08415288f, 0.10020141f, -0.01228561f,
1618        0.06553826f, 0.04554005f, 0.07890417f, 0.03041138f, 0.01752007f,
1619        0.09208256f, -3.74419295e-004f, 0.10549527f, 0.04686913f, 0.01894833f,
1620        -0.02651412f, -4.34682379e-003f, 5.44942822e-003f, 0.01444484f,
1621        0.05882156f, -0.03336544f, 0.04603891f, -0.10432546f, 0.01923928f,
1622        0.01842845f, -0.01712168f, -0.02222766f, 0.04693324f, -0.06202956f,
1623        -0.01422159f, 0.08732220f, -0.07706107f, 0.02661049f, -0.04300238f,
1624        -0.03092422f, -0.03552184f, -0.01886088f, -0.04979934f, 0.03906401f,
1625        0.04608644f, 0.04966111f, 0.04275464f, -0.04621769f, -0.02653212f,
1626        8.57011229e-003f, 0.03839684f, 0.05818764f, 0.03880796f,
1627        -2.76100676e-004f, 0.03076511f, -0.03266929f, -0.05374557f,
1628        0.04986527f, -9.45429131e-003f, 0.03582499f, -2.64564669e-003f,
1629        -1.07461517e-003f, 0.02962313f, -0.01483363f, 0.03060869f, 0.02448327f,
1630        0.01845641f, 0.03282966f, -0.03534438f, -0.01084059f, -0.01119136f,
1631        -1.85360224e-003f, -5.94652840e-004f, -0.04451817f, 2.98327743e-003f,
1632        0.06272484f, -0.02152076f, -3.05971340e-003f, -0.05070828f,
1633        0.01531762f, 0.01282815f, 0.05167150f, 9.46266949e-003f,
1634        -3.34558333e-003f, 0.11442288f, -0.03906701f, -2.67325155e-003f,
1635        0.03069184f, -0.01134165f, 0.02949462f, 0.02879886f, 0.03855566f,
1636        -0.03450781f, 0.09142872f, -0.02156654f, 0.06075062f, -0.06220816f,
1637        0.01944680f, 6.68372354e-003f, -0.06656796f, 8.70784000e-003f,
1638        0.03456013f, 0.02434320f, -0.13236357f, -0.04177035f, -0.02069627f,
1639        0.01068112f, 0.01505432f, -0.07517391f, -3.83571628e-003f,
1640        -0.06298508f, -0.02881260f, -0.13101046f, -0.07221562f,
1641        -5.79945277e-003f, -8.57300125e-003f, 0.03782469f, 0.02762164f,
1642        0.04942456f, -0.02936396f, 0.09597211f, 0.01921411f, 0.06101191f,
1643        -0.04787507f, -0.01379578f, -7.40224449e-003f, -0.02220136f,
1644        -0.01313756f, 7.77558051e-003f, 0.12296968f, 0.02939998f, 0.03594062f,
1645        -0.07788624f, -0.01133144f, 3.99316690e-004f, -0.06090347f,
1646        -0.01122066f, -4.68682544e-003f, 0.07633100f, -0.06748922f,
1647        -0.05640298f, -0.05265681f, -0.01139122f, -0.01624347f, -0.04715714f,
1648        -0.01099092f, 0.01048561f, 3.28499987e-003f, -0.05810167f,
1649        -0.07699911f, -0.03330683f, 0.04185145f, 0.03478536f, 0.02275165f,
1650        0.02304766f, 6.66040834e-003f, 0.10968148f, -5.93013782e-003f,
1651        -0.04858336f, -0.04203213f, -0.09316786f, -6.13074889e-003f,
1652        -0.02544625f, 0.01366201f, 9.18555818e-003f, -0.01846578f,
1653        -0.05622401f, -0.03989377f, -0.07810296f, 6.91275718e-003f,
1654        0.05957597f, -0.03901334f, 0.01572002f, -0.01193903f,
1655        -6.89400872e-003f, -0.03093356f, -0.04136098f, -0.01562869f,
1656        -0.04604580f, 0.02865234f, -0.08678447f, -0.03232484f, -0.05364593f,
1657        -0.01445016f, -0.07003860f, -0.08669746f, -0.04520775f, 0.04274122f,
1658        0.03117515f, 0.08175703f, 0.01081109f, 0.06379741f, 0.06199206f,
1659        0.02865988f, 0.02360346f, 0.06725410f, -0.03248780f, -9.37702879e-003f,
1660        0.08265898f, -0.02245839f, 0.05125763f, -0.01862395f, 0.01973453f,
1661        -0.01994494f, -0.10770868f, 0.03180375f, 3.23935156e-003f,
1662        -0.02142080f, -0.04256190f, 0.04760900f, 0.04282863f, 0.05635953f,
1663        -0.01870849f, 0.05540622f, -0.03042666f, 0.01455277f, -0.06630179f,
1664        -0.05843807f, -0.03739681f, -0.09739155f, -0.03220233f, -0.05620182f,
1665        -0.10381401f, 0.07400211f, 4.20676917e-003f, 0.03258535f,
1666        2.14308966e-003f, 0.05121966f, -0.01274337f, 0.02384761f, 0.06335578f,
1667        -0.07905591f, 0.08375625f, -0.07898903f, -0.06508528f, -0.02498444f,
1668        0.06535810f, 0.03970535f, 0.04895468f, -0.01169566f, -0.03980601f,
1669        0.05682293f, 0.05925463f, -0.01165808f, -0.07936699f, -0.04208954f,
1670        0.01333987f, 0.09051196f, 0.10098671f, -0.03974256f, 0.01238771f,
1671        -0.07501741f, -0.03655440f, -0.04301528f, 0.09216860f,
1672        4.63579083e-004f, 0.02851115f, 0.02142735f, 1.28244064e-004f,
1673        0.02879687f, -0.08554889f, -0.04838862f, 0.08135369f, -0.05756533f,
1674        0.01413900f, 0.03451880f, -0.06619488f, -0.03053130f, 0.02961676f,
1675        -0.07384635f, 0.01135692f, 0.05283910f, -0.07778034f, -0.02107482f,
1676        -0.05511716f, -0.13473752f, 0.03030157f, 0.06722020f, -0.06218817f,
1677        -0.05826827f, 0.06254654f, 0.02895772f, -0.01664000f, -0.03620280f,
1678        -0.01612278f, -1.46097376e-003f, 0.14013411f, -8.96181818e-003f,
1679        -0.03250246f, 3.38630192e-003f, 2.64779478e-003f, 0.03359732f,
1680        -0.02411991f, -0.04229729f, 0.10666174f, -6.66579151f };
1681     return vector<float>(detector, detector + sizeof(detector)/sizeof(detector[0]));
1682 }
1683
1684 }