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