1 /*
2  *  This file is part of RawTherapee.
3  *
4  *  Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
5  *
6  *  RawTherapee is free software: you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation, either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  RawTherapee is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with RawTherapee.  If not, see <http://www.gnu.org/licenses/>.
18  *
19  *  These median implementations from Flössie and Ingo Weyrich are inspired by this work:
20  *
21  *  http://ndevilla.free.fr/median/median.pdf
22  *  http://pages.ripco.net/~jgamble/nw.html
23  *  https://github.com/hoytech/Algorithm-Networksort-Chooser
24  *
25  *  Instead of using the PIX_SORT and PIX_SWAP macros we use std::min() and std::max()
26  *  because it turned out that it generates much faster (branch free) code on machines which support SSE
27  *
28  */
29 
30 #pragma once
31 
32 #include <array>
33 #include <algorithm>
34 
35 #include "opthelper.h"
36 
37 #if defined __GNUC__ && __GNUC__>=6 && defined __SSE2__
38     #pragma GCC diagnostic ignored "-Wignored-attributes"
39 #endif
40 
41 template<typename T, std::size_t N>
median(std::array<T,N> array)42 inline T median(std::array<T, N> array)
43 {
44     const typename std::array<T, N>::iterator middle = array.begin() + N / 2;
45     std::nth_element(array.begin(), middle, array.end());
46 
47     return
48         (N % 2)
49             ? *middle
50             : ((*middle + *std::max_element(array.begin(), middle)) / static_cast<T>(2));
51 }
52 
53 template<typename T>
median(std::array<T,3> array)54 inline T median(std::array<T, 3> array)
55 {
56     return std::max(std::min(array[0], array[1]), std::min(array[2], std::max(array[0], array[1])));
57 }
58 
59 #ifdef __SSE2__
60 template<>
median(std::array<vfloat,3> array)61 inline vfloat median(std::array<vfloat, 3> array)
62 {
63     return vmaxf(vminf(array[0], array[1]), vminf(array[2], vmaxf(array[0], array[1])));
64 }
65 #endif
66 
67 template<typename T>
median(std::array<T,5> array)68 inline T median(std::array<T, 5> array)
69 {
70     T tmp = std::min(array[0], array[1]);
71     array[1] = std::max(array[0], array[1]);
72     array[0] = tmp;
73     tmp = std::min(array[3], array[4]);
74     array[4] = std::max(array[3], array[4]);
75     array[3] = std::max(array[0], tmp);
76     array[1] = std::min(array[1], array[4]);
77     tmp = std::min(array[1], array[2]);
78     array[2] = std::max(array[1], array[2]);
79     array[1] = tmp;
80     tmp = std::min(array[2], array[3]);
81     return std::max(array[1], tmp);
82 }
83 
84 #ifdef __SSE2__
85 template<>
median(std::array<vfloat,5> array)86 inline vfloat median(std::array<vfloat, 5> array)
87 {
88     vfloat tmp = vminf(array[0], array[1]);
89     array[1] = vmaxf(array[0], array[1]);
90     array[0] = tmp;
91     tmp = vminf(array[3], array[4]);
92     array[4] = vmaxf(array[3], array[4]);
93     array[3] = vmaxf(array[0], tmp);
94     array[1] = vminf(array[1], array[4]);
95     tmp = vminf(array[1], array[2]);
96     array[2] = vmaxf(array[1], array[2]);
97     array[1] = tmp;
98     tmp = vminf(array[2], array[3]);
99     return vmaxf(array[1], tmp);
100 }
101 #endif
102 
103 template<typename T>
median(std::array<T,7> array)104 inline T median(std::array<T, 7> array)
105 {
106     T tmp = std::min(array[0], array[5]);
107     array[5] = std::max(array[0], array[5]);
108     array[0] = tmp;
109     tmp = std::min(array[0], array[3]);
110     array[3] = std::max(array[0], array[3]);
111     array[0] = tmp;
112     tmp = std::min(array[1], array[6]);
113     array[6] = std::max(array[1], array[6]);
114     array[1] = tmp;
115     tmp = std::min(array[2], array[4]);
116     array[4] = std::max(array[2], array[4]);
117     array[2] = tmp;
118     array[1] = std::max(array[0], array[1]);
119     tmp = std::min(array[3], array[5]);
120     array[5] = std::max(array[3], array[5]);
121     array[3] = tmp;
122     tmp = std::min(array[2], array[6]);
123     array[6] = std::max(array[2], array[6]);
124     array[3] = std::max(tmp, array[3]);
125     array[3] = std::min(array[3], array[6]);
126     tmp = std::min(array[4], array[5]);
127     array[4] = std::max(array[1], tmp);
128     tmp = std::min(array[1], tmp);
129     array[3] = std::max(tmp, array[3]);
130     return std::min(array[3], array[4]);
131 }
132 
133 #ifdef __SSE2__
134 template<>
median(std::array<vfloat,7> array)135 inline vfloat median(std::array<vfloat, 7> array)
136 {
137     vfloat tmp = vminf(array[0], array[5]);
138     array[5] = vmaxf(array[0], array[5]);
139     array[0] = tmp;
140     tmp = vminf(array[0], array[3]);
141     array[3] = vmaxf(array[0], array[3]);
142     array[0] = tmp;
143     tmp = vminf(array[1], array[6]);
144     array[6] = vmaxf(array[1], array[6]);
145     array[1] = tmp;
146     tmp = vminf(array[2], array[4]);
147     array[4] = vmaxf(array[2], array[4]);
148     array[2] = tmp;
149     array[1] = vmaxf(array[0], array[1]);
150     tmp = vminf(array[3], array[5]);
151     array[5] = vmaxf(array[3], array[5]);
152     array[3] = tmp;
153     tmp = vminf(array[2], array[6]);
154     array[6] = vmaxf(array[2], array[6]);
155     array[3] = vmaxf(tmp, array[3]);
156     array[3] = vminf(array[3], array[6]);
157     tmp = vminf(array[4], array[5]);
158     array[4] = vmaxf(array[1], tmp);
159     tmp = vminf(array[1], tmp);
160     array[3] = vmaxf(tmp, array[3]);
161     return vminf(array[3], array[4]);
162 }
163 #endif
164 
165 template<typename T>
median(std::array<T,9> array)166 inline T median(std::array<T, 9> array)
167 {
168     T tmp = std::min(array[1], array[2]);
169     array[2] = std::max(array[1], array[2]);
170     array[1] = tmp;
171     tmp = std::min(array[4], array[5]);
172     array[5] = std::max(array[4], array[5]);
173     array[4] = tmp;
174     tmp = std::min(array[7], array[8]);
175     array[8] = std::max(array[7], array[8]);
176     array[7] = tmp;
177     tmp = std::min(array[0], array[1]);
178     array[1] = std::max(array[0], array[1]);
179     array[0] = tmp;
180     tmp = std::min(array[3], array[4]);
181     array[4] = std::max(array[3], array[4]);
182     array[3] = tmp;
183     tmp = std::min(array[6], array[7]);
184     array[7] = std::max(array[6], array[7]);
185     array[6] = tmp;
186     tmp = std::min(array[1], array[2]);
187     array[2] = std::max(array[1], array[2]);
188     array[1] = tmp;
189     tmp = std::min(array[4], array[5]);
190     array[5] = std::max(array[4], array[5]);
191     array[4] = tmp;
192     tmp = std::min(array[7], array[8]);
193     array[8] = std::max(array[7], array[8]);
194     array[3] = std::max(array[0], array[3]);
195     array[5] = std::min(array[5], array[8]);
196     array[7] = std::max(array[4], tmp);
197     tmp = std::min(array[4], tmp);
198     array[6] = std::max(array[3], array[6]);
199     array[4] = std::max(array[1], tmp);
200     array[2] = std::min(array[2], array[5]);
201     array[4] = std::min(array[4], array[7]);
202     tmp = std::min(array[4], array[2]);
203     array[2] = std::max(array[4], array[2]);
204     array[4] = std::max(array[6], tmp);
205     return std::min(array[4], array[2]);
206 }
207 
208 #ifdef __SSE2__
209 template<>
median(std::array<vfloat,9> array)210 inline vfloat median(std::array<vfloat, 9> array)
211 {
212     vfloat tmp = vminf(array[1], array[2]);
213     array[2] = vmaxf(array[1], array[2]);
214     array[1] = tmp;
215     tmp = vminf(array[4], array[5]);
216     array[5] = vmaxf(array[4], array[5]);
217     array[4] = tmp;
218     tmp = vminf(array[7], array[8]);
219     array[8] = vmaxf(array[7], array[8]);
220     array[7] = tmp;
221     tmp = vminf(array[0], array[1]);
222     array[1] = vmaxf(array[0], array[1]);
223     array[0] = tmp;
224     tmp = vminf(array[3], array[4]);
225     array[4] = vmaxf(array[3], array[4]);
226     array[3] = tmp;
227     tmp = vminf(array[6], array[7]);
228     array[7] = vmaxf(array[6], array[7]);
229     array[6] = tmp;
230     tmp = vminf(array[1], array[2]);
231     array[2] = vmaxf(array[1], array[2]);
232     array[1] = tmp;
233     tmp = vminf(array[4], array[5]);
234     array[5] = vmaxf(array[4], array[5]);
235     array[4] = tmp;
236     tmp = vminf(array[7], array[8]);
237     array[8] = vmaxf(array[7], array[8]);
238     array[3] = vmaxf(array[0], array[3]);
239     array[5] = vminf(array[5], array[8]);
240     array[7] = vmaxf(array[4], tmp);
241     tmp = vminf(array[4], tmp);
242     array[6] = vmaxf(array[3], array[6]);
243     array[4] = vmaxf(array[1], tmp);
244     array[2] = vminf(array[2], array[5]);
245     array[4] = vminf(array[4], array[7]);
246     tmp = vminf(array[4], array[2]);
247     array[2] = vmaxf(array[4], array[2]);
248     array[4] = vmaxf(array[6], tmp);
249     return vminf(array[4], array[2]);
250 }
251 #endif
252 
253 template<typename T>
median(std::array<T,13> array)254 inline T median(std::array<T, 13> array)
255 {
256     T tmp = std::min(array[1], array[7]);
257     array[7] = std::max(array[1], array[7]);
258     array[1] = tmp;
259     tmp = std::min(array[9], array[11]);
260     array[11] = std::max(array[9], array[11]);
261     array[9] = tmp;
262     tmp = std::min(array[3], array[4]);
263     array[4] = std::max(array[3], array[4]);
264     array[3] = tmp;
265     tmp = std::min(array[5], array[8]);
266     array[8] = std::max(array[5], array[8]);
267     array[5] = tmp;
268     tmp = std::min(array[0], array[12]);
269     array[12] = std::max(array[0], array[12]);
270     array[0] = tmp;
271     tmp = std::min(array[2], array[6]);
272     array[6] = std::max(array[2], array[6]);
273     array[2] = tmp;
274     tmp = std::min(array[0], array[1]);
275     array[1] = std::max(array[0], array[1]);
276     array[0] = tmp;
277     tmp = std::min(array[2], array[3]);
278     array[3] = std::max(array[2], array[3]);
279     array[2] = tmp;
280     tmp = std::min(array[4], array[6]);
281     array[6] = std::max(array[4], array[6]);
282     array[4] = tmp;
283     tmp = std::min(array[8], array[11]);
284     array[11] = std::max(array[8], array[11]);
285     array[8] = tmp;
286     tmp = std::min(array[7], array[12]);
287     array[12] = std::max(array[7], array[12]);
288     array[7] = tmp;
289     tmp = std::min(array[5], array[9]);
290     array[9] = std::max(array[5], array[9]);
291     array[5] = tmp;
292     tmp = std::min(array[0], array[2]);
293     array[2] = std::max(array[0], array[2]);
294     array[0] = tmp;
295     tmp = std::min(array[3], array[7]);
296     array[7] = std::max(array[3], array[7]);
297     array[3] = tmp;
298     tmp = std::min(array[10], array[11]);
299     array[11] = std::max(array[10], array[11]);
300     array[10] = tmp;
301     tmp = std::min(array[1], array[4]);
302     array[4] = std::max(array[1], array[4]);
303     array[1] = tmp;
304     tmp = std::min(array[6], array[12]);
305     array[12] = std::max(array[6], array[12]);
306     array[6] = tmp;
307     tmp = std::min(array[7], array[8]);
308     array[8] = std::max(array[7], array[8]);
309     array[7] = tmp;
310     array[11] = std::min(array[11], array[12]);
311     tmp = std::min(array[4], array[9]);
312     array[9] = std::max(array[4], array[9]);
313     array[4] = tmp;
314     tmp = std::min(array[6], array[10]);
315     array[10] = std::max(array[6], array[10]);
316     array[6] = tmp;
317     tmp = std::min(array[3], array[4]);
318     array[4] = std::max(array[3], array[4]);
319     array[3] = tmp;
320     tmp = std::min(array[5], array[6]);
321     array[6] = std::max(array[5], array[6]);
322     array[5] = tmp;
323     array[8] = std::min(array[8], array[9]);
324     array[10] = std::min(array[10], array[11]);
325     tmp = std::min(array[1], array[7]);
326     array[7] = std::max(array[1], array[7]);
327     array[1] = tmp;
328     tmp = std::min(array[2], array[6]);
329     array[6] = std::max(array[2], array[6]);
330     array[2] = tmp;
331     array[3] = std::max(array[1], array[3]);
332     tmp = std::min(array[4], array[7]);
333     array[7] = std::max(array[4], array[7]);
334     array[4] = tmp;
335     array[8] = std::min(array[8], array[10]);
336     array[5] = std::max(array[0], array[5]);
337     array[5] = std::max(array[2], array[5]);
338     tmp = std::min(array[6], array[8]);
339     array[8] = std::max(array[6], array[8]);
340     array[5] = std::max(array[3], array[5]);
341     array[7] = std::min(array[7], array[8]);
342     array[6] = std::max(array[4], tmp);
343     tmp = std::min(array[4], tmp);
344     array[5] = std::max(tmp, array[5]);
345     array[6] = std::min(array[6], array[7]);
346     return std::max(array[5], array[6]);
347 }
348 
349 #ifdef __SSE2__
350 template<>
median(std::array<vfloat,13> array)351 inline vfloat median(std::array<vfloat, 13> array)
352 {
353     vfloat tmp = vminf(array[1], array[7]);
354     array[7] = vmaxf(array[1], array[7]);
355     array[1] = tmp;
356     tmp = vminf(array[9], array[11]);
357     array[11] = vmaxf(array[9], array[11]);
358     array[9] = tmp;
359     tmp = vminf(array[3], array[4]);
360     array[4] = vmaxf(array[3], array[4]);
361     array[3] = tmp;
362     tmp = vminf(array[5], array[8]);
363     array[8] = vmaxf(array[5], array[8]);
364     array[5] = tmp;
365     tmp = vminf(array[0], array[12]);
366     array[12] = vmaxf(array[0], array[12]);
367     array[0] = tmp;
368     tmp = vminf(array[2], array[6]);
369     array[6] = vmaxf(array[2], array[6]);
370     array[2] = tmp;
371     tmp = vminf(array[0], array[1]);
372     array[1] = vmaxf(array[0], array[1]);
373     array[0] = tmp;
374     tmp = vminf(array[2], array[3]);
375     array[3] = vmaxf(array[2], array[3]);
376     array[2] = tmp;
377     tmp = vminf(array[4], array[6]);
378     array[6] = vmaxf(array[4], array[6]);
379     array[4] = tmp;
380     tmp = vminf(array[8], array[11]);
381     array[11] = vmaxf(array[8], array[11]);
382     array[8] = tmp;
383     tmp = vminf(array[7], array[12]);
384     array[12] = vmaxf(array[7], array[12]);
385     array[7] = tmp;
386     tmp = vminf(array[5], array[9]);
387     array[9] = vmaxf(array[5], array[9]);
388     array[5] = tmp;
389     tmp = vminf(array[0], array[2]);
390     array[2] = vmaxf(array[0], array[2]);
391     array[0] = tmp;
392     tmp = vminf(array[3], array[7]);
393     array[7] = vmaxf(array[3], array[7]);
394     array[3] = tmp;
395     tmp = vminf(array[10], array[11]);
396     array[11] = vmaxf(array[10], array[11]);
397     array[10] = tmp;
398     tmp = vminf(array[1], array[4]);
399     array[4] = vmaxf(array[1], array[4]);
400     array[1] = tmp;
401     tmp = vminf(array[6], array[12]);
402     array[12] = vmaxf(array[6], array[12]);
403     array[6] = tmp;
404     tmp = vminf(array[7], array[8]);
405     array[8] = vmaxf(array[7], array[8]);
406     array[7] = tmp;
407     array[11] = vminf(array[11], array[12]);
408     tmp = vminf(array[4], array[9]);
409     array[9] = vmaxf(array[4], array[9]);
410     array[4] = tmp;
411     tmp = vminf(array[6], array[10]);
412     array[10] = vmaxf(array[6], array[10]);
413     array[6] = tmp;
414     tmp = vminf(array[3], array[4]);
415     array[4] = vmaxf(array[3], array[4]);
416     array[3] = tmp;
417     tmp = vminf(array[5], array[6]);
418     array[6] = vmaxf(array[5], array[6]);
419     array[5] = tmp;
420     array[8] = vminf(array[8], array[9]);
421     array[10] = vminf(array[10], array[11]);
422     tmp = vminf(array[1], array[7]);
423     array[7] = vmaxf(array[1], array[7]);
424     array[1] = tmp;
425     tmp = vminf(array[2], array[6]);
426     array[6] = vmaxf(array[2], array[6]);
427     array[2] = tmp;
428     array[3] = vmaxf(array[1], array[3]);
429     tmp = vminf(array[4], array[7]);
430     array[7] = vmaxf(array[4], array[7]);
431     array[4] = tmp;
432     array[8] = vminf(array[8], array[10]);
433     array[5] = vmaxf(array[0], array[5]);
434     array[5] = vmaxf(array[2], array[5]);
435     tmp = vminf(array[6], array[8]);
436     array[8] = vmaxf(array[6], array[8]);
437     array[5] = vmaxf(array[3], array[5]);
438     array[7] = vminf(array[7], array[8]);
439     array[6] = vmaxf(array[4], tmp);
440     tmp = vminf(array[4], tmp);
441     array[5] = vmaxf(tmp, array[5]);
442     array[6] = vminf(array[6], array[7]);
443     return vmaxf(array[5], array[6]);
444 }
445 #endif
446 
447 template<typename T>
median(std::array<T,25> array)448 inline T median(std::array<T, 25> array)
449 {
450     T tmp = std::min(array[0], array[1]);
451     array[1] = std::max(array[0], array[1]);
452     array[0] = tmp;
453     tmp = std::min(array[3], array[4]);
454     array[4] = std::max(array[3], array[4]);
455     array[3] = tmp;
456     tmp = std::min(array[2], array[4]);
457     array[4] = std::max(array[2], array[4]);
458     array[2] = std::min(tmp, array[3]);
459     array[3] = std::max(tmp, array[3]);
460     tmp = std::min(array[6], array[7]);
461     array[7] = std::max(array[6], array[7]);
462     array[6] = tmp;
463     tmp = std::min(array[5], array[7]);
464     array[7] = std::max(array[5], array[7]);
465     array[5] = std::min(tmp, array[6]);
466     array[6] = std::max(tmp, array[6]);
467     tmp = std::min(array[9], array[10]);
468     array[10] = std::max(array[9], array[10]);
469     array[9] = tmp;
470     tmp = std::min(array[8], array[10]);
471     array[10] = std::max(array[8], array[10]);
472     array[8] = std::min(tmp, array[9]);
473     array[9] = std::max(tmp, array[9]);
474     tmp = std::min(array[12], array[13]);
475     array[13] = std::max(array[12], array[13]);
476     array[12] = tmp;
477     tmp = std::min(array[11], array[13]);
478     array[13] = std::max(array[11], array[13]);
479     array[11] = std::min(tmp, array[12]);
480     array[12] = std::max(tmp, array[12]);
481     tmp = std::min(array[15], array[16]);
482     array[16] = std::max(array[15], array[16]);
483     array[15] = tmp;
484     tmp = std::min(array[14], array[16]);
485     array[16] = std::max(array[14], array[16]);
486     array[14] = std::min(tmp, array[15]);
487     array[15] = std::max(tmp, array[15]);
488     tmp = std::min(array[18], array[19]);
489     array[19] = std::max(array[18], array[19]);
490     array[18] = tmp;
491     tmp = std::min(array[17], array[19]);
492     array[19] = std::max(array[17], array[19]);
493     array[17] = std::min(tmp, array[18]);
494     array[18] = std::max(tmp, array[18]);
495     tmp = std::min(array[21], array[22]);
496     array[22] = std::max(array[21], array[22]);
497     array[21] = tmp;
498     tmp = std::min(array[20], array[22]);
499     array[22] = std::max(array[20], array[22]);
500     array[20] = std::min(tmp, array[21]);
501     array[21] = std::max(tmp, array[21]);
502     tmp = std::min(array[23], array[24]);
503     array[24] = std::max(array[23], array[24]);
504     array[23] = tmp;
505     tmp = std::min(array[2], array[5]);
506     array[5] = std::max(array[2], array[5]);
507     array[2] = tmp;
508     tmp = std::min(array[3], array[6]);
509     array[6] = std::max(array[3], array[6]);
510     array[3] = tmp;
511     tmp = std::min(array[0], array[6]);
512     array[6] = std::max(array[0], array[6]);
513     array[0] = std::min(tmp, array[3]);
514     array[3] = std::max(tmp, array[3]);
515     tmp = std::min(array[4], array[7]);
516     array[7] = std::max(array[4], array[7]);
517     array[4] = tmp;
518     tmp = std::min(array[1], array[7]);
519     array[7] = std::max(array[1], array[7]);
520     array[1] = std::min(tmp, array[4]);
521     array[4] = std::max(tmp, array[4]);
522     tmp = std::min(array[11], array[14]);
523     array[14] = std::max(array[11], array[14]);
524     array[11] = tmp;
525     tmp = std::min(array[8], array[14]);
526     array[14] = std::max(array[8], array[14]);
527     array[8] = std::min(tmp, array[11]);
528     array[11] = std::max(tmp, array[11]);
529     tmp = std::min(array[12], array[15]);
530     array[15] = std::max(array[12], array[15]);
531     array[12] = tmp;
532     tmp = std::min(array[9], array[15]);
533     array[15] = std::max(array[9], array[15]);
534     array[9] = std::min(tmp, array[12]);
535     array[12] = std::max(tmp, array[12]);
536     tmp = std::min(array[13], array[16]);
537     array[16] = std::max(array[13], array[16]);
538     array[13] = tmp;
539     tmp = std::min(array[10], array[16]);
540     array[16] = std::max(array[10], array[16]);
541     array[10] = std::min(tmp, array[13]);
542     array[13] = std::max(tmp, array[13]);
543     tmp = std::min(array[20], array[23]);
544     array[23] = std::max(array[20], array[23]);
545     array[20] = tmp;
546     tmp = std::min(array[17], array[23]);
547     array[23] = std::max(array[17], array[23]);
548     array[17] = std::min(tmp, array[20]);
549     array[20] = std::max(tmp, array[20]);
550     tmp = std::min(array[21], array[24]);
551     array[24] = std::max(array[21], array[24]);
552     array[21] = tmp;
553     tmp = std::min(array[18], array[24]);
554     array[24] = std::max(array[18], array[24]);
555     array[18] = std::min(tmp, array[21]);
556     array[21] = std::max(tmp, array[21]);
557     tmp = std::min(array[19], array[22]);
558     array[22] = std::max(array[19], array[22]);
559     array[19] = tmp;
560     array[17] = std::max(array[8], array[17]);
561     tmp = std::min(array[9], array[18]);
562     array[18] = std::max(array[9], array[18]);
563     array[9] = tmp;
564     tmp = std::min(array[0], array[18]);
565     array[18] = std::max(array[0], array[18]);
566     array[9] = std::max(tmp, array[9]);
567     tmp = std::min(array[10], array[19]);
568     array[19] = std::max(array[10], array[19]);
569     array[10] = tmp;
570     tmp = std::min(array[1], array[19]);
571     array[19] = std::max(array[1], array[19]);
572     array[1] = std::min(tmp, array[10]);
573     array[10] = std::max(tmp, array[10]);
574     tmp = std::min(array[11], array[20]);
575     array[20] = std::max(array[11], array[20]);
576     array[11] = tmp;
577     tmp = std::min(array[2], array[20]);
578     array[20] = std::max(array[2], array[20]);
579     array[11] = std::max(tmp, array[11]);
580     tmp = std::min(array[12], array[21]);
581     array[21] = std::max(array[12], array[21]);
582     array[12] = tmp;
583     tmp = std::min(array[3], array[21]);
584     array[21] = std::max(array[3], array[21]);
585     array[3] = std::min(tmp, array[12]);
586     array[12] = std::max(tmp, array[12]);
587     tmp = std::min(array[13], array[22]);
588     array[22] = std::max(array[13], array[22]);
589     array[4] = std::min(array[4], array[22]);
590     array[13] = std::max(array[4], tmp);
591     tmp = std::min(array[4], tmp);
592     array[4] = tmp;
593     tmp = std::min(array[14], array[23]);
594     array[23] = std::max(array[14], array[23]);
595     array[14] = tmp;
596     tmp = std::min(array[5], array[23]);
597     array[23] = std::max(array[5], array[23]);
598     array[5] = std::min(tmp, array[14]);
599     array[14] = std::max(tmp, array[14]);
600     tmp = std::min(array[15], array[24]);
601     array[24] = std::max(array[15], array[24]);
602     array[15] = tmp;
603     array[6] = std::min(array[6], array[24]);
604     tmp = std::min(array[6], array[15]);
605     array[15] = std::max(array[6], array[15]);
606     array[6] = tmp;
607     tmp = std::min(array[7], array[16]);
608     array[7] = std::min(tmp, array[19]);
609     tmp = std::min(array[13], array[21]);
610     array[15] = std::min(array[15], array[23]);
611     tmp = std::min(array[7], tmp);
612     array[7] = std::min(tmp, array[15]);
613     array[9] = std::max(array[1], array[9]);
614     array[11] = std::max(array[3], array[11]);
615     array[17] = std::max(array[5], array[17]);
616     array[17] = std::max(array[11], array[17]);
617     array[17] = std::max(array[9], array[17]);
618     tmp = std::min(array[4], array[10]);
619     array[10] = std::max(array[4], array[10]);
620     array[4] = tmp;
621     tmp = std::min(array[6], array[12]);
622     array[12] = std::max(array[6], array[12]);
623     array[6] = tmp;
624     tmp = std::min(array[7], array[14]);
625     array[14] = std::max(array[7], array[14]);
626     array[7] = tmp;
627     tmp = std::min(array[4], array[6]);
628     array[6] = std::max(array[4], array[6]);
629     array[7] = std::max(tmp, array[7]);
630     tmp = std::min(array[12], array[14]);
631     array[14] = std::max(array[12], array[14]);
632     array[12] = tmp;
633     array[10] = std::min(array[10], array[14]);
634     tmp = std::min(array[6], array[7]);
635     array[7] = std::max(array[6], array[7]);
636     array[6] = tmp;
637     tmp = std::min(array[10], array[12]);
638     array[12] = std::max(array[10], array[12]);
639     array[10] = std::max(array[6], tmp);
640     tmp = std::min(array[6], tmp);
641     array[17] = std::max(tmp, array[17]);
642     tmp = std::min(array[12], array[17]);
643     array[17] = std::max(array[12], array[17]);
644     array[12] = tmp;
645     array[7] = std::min(array[7], array[17]);
646     tmp = std::min(array[7], array[10]);
647     array[10] = std::max(array[7], array[10]);
648     array[7] = tmp;
649     tmp = std::min(array[12], array[18]);
650     array[18] = std::max(array[12], array[18]);
651     array[12] = std::max(array[7], tmp);
652     array[10] = std::min(array[10], array[18]);
653     tmp = std::min(array[12], array[20]);
654     array[20] = std::max(array[12], array[20]);
655     array[12] = tmp;
656     tmp = std::min(array[10], array[20]);
657     return std::max(tmp, array[12]);
658 }
659 
660 #ifdef __SSE2__
661 template<>
median(std::array<vfloat,25> array)662 inline vfloat median(std::array<vfloat, 25> array)
663 {
664     vfloat tmp = vminf(array[0], array[1]);
665     array[1] = vmaxf(array[0], array[1]);
666     array[0] = tmp;
667     tmp = vminf(array[3], array[4]);
668     array[4] = vmaxf(array[3], array[4]);
669     array[3] = tmp;
670     tmp = vminf(array[2], array[4]);
671     array[4] = vmaxf(array[2], array[4]);
672     array[2] = vminf(tmp, array[3]);
673     array[3] = vmaxf(tmp, array[3]);
674     tmp = vminf(array[6], array[7]);
675     array[7] = vmaxf(array[6], array[7]);
676     array[6] = tmp;
677     tmp = vminf(array[5], array[7]);
678     array[7] = vmaxf(array[5], array[7]);
679     array[5] = vminf(tmp, array[6]);
680     array[6] = vmaxf(tmp, array[6]);
681     tmp = vminf(array[9], array[10]);
682     array[10] = vmaxf(array[9], array[10]);
683     array[9] = tmp;
684     tmp = vminf(array[8], array[10]);
685     array[10] = vmaxf(array[8], array[10]);
686     array[8] = vminf(tmp, array[9]);
687     array[9] = vmaxf(tmp, array[9]);
688     tmp = vminf(array[12], array[13]);
689     array[13] = vmaxf(array[12], array[13]);
690     array[12] = tmp;
691     tmp = vminf(array[11], array[13]);
692     array[13] = vmaxf(array[11], array[13]);
693     array[11] = vminf(tmp, array[12]);
694     array[12] = vmaxf(tmp, array[12]);
695     tmp = vminf(array[15], array[16]);
696     array[16] = vmaxf(array[15], array[16]);
697     array[15] = tmp;
698     tmp = vminf(array[14], array[16]);
699     array[16] = vmaxf(array[14], array[16]);
700     array[14] = vminf(tmp, array[15]);
701     array[15] = vmaxf(tmp, array[15]);
702     tmp = vminf(array[18], array[19]);
703     array[19] = vmaxf(array[18], array[19]);
704     array[18] = tmp;
705     tmp = vminf(array[17], array[19]);
706     array[19] = vmaxf(array[17], array[19]);
707     array[17] = vminf(tmp, array[18]);
708     array[18] = vmaxf(tmp, array[18]);
709     tmp = vminf(array[21], array[22]);
710     array[22] = vmaxf(array[21], array[22]);
711     array[21] = tmp;
712     tmp = vminf(array[20], array[22]);
713     array[22] = vmaxf(array[20], array[22]);
714     array[20] = vminf(tmp, array[21]);
715     array[21] = vmaxf(tmp, array[21]);
716     tmp = vminf(array[23], array[24]);
717     array[24] = vmaxf(array[23], array[24]);
718     array[23] = tmp;
719     tmp = vminf(array[2], array[5]);
720     array[5] = vmaxf(array[2], array[5]);
721     array[2] = tmp;
722     tmp = vminf(array[3], array[6]);
723     array[6] = vmaxf(array[3], array[6]);
724     array[3] = tmp;
725     tmp = vminf(array[0], array[6]);
726     array[6] = vmaxf(array[0], array[6]);
727     array[0] = vminf(tmp, array[3]);
728     array[3] = vmaxf(tmp, array[3]);
729     tmp = vminf(array[4], array[7]);
730     array[7] = vmaxf(array[4], array[7]);
731     array[4] = tmp;
732     tmp = vminf(array[1], array[7]);
733     array[7] = vmaxf(array[1], array[7]);
734     array[1] = vminf(tmp, array[4]);
735     array[4] = vmaxf(tmp, array[4]);
736     tmp = vminf(array[11], array[14]);
737     array[14] = vmaxf(array[11], array[14]);
738     array[11] = tmp;
739     tmp = vminf(array[8], array[14]);
740     array[14] = vmaxf(array[8], array[14]);
741     array[8] = vminf(tmp, array[11]);
742     array[11] = vmaxf(tmp, array[11]);
743     tmp = vminf(array[12], array[15]);
744     array[15] = vmaxf(array[12], array[15]);
745     array[12] = tmp;
746     tmp = vminf(array[9], array[15]);
747     array[15] = vmaxf(array[9], array[15]);
748     array[9] = vminf(tmp, array[12]);
749     array[12] = vmaxf(tmp, array[12]);
750     tmp = vminf(array[13], array[16]);
751     array[16] = vmaxf(array[13], array[16]);
752     array[13] = tmp;
753     tmp = vminf(array[10], array[16]);
754     array[16] = vmaxf(array[10], array[16]);
755     array[10] = vminf(tmp, array[13]);
756     array[13] = vmaxf(tmp, array[13]);
757     tmp = vminf(array[20], array[23]);
758     array[23] = vmaxf(array[20], array[23]);
759     array[20] = tmp;
760     tmp = vminf(array[17], array[23]);
761     array[23] = vmaxf(array[17], array[23]);
762     array[17] = vminf(tmp, array[20]);
763     array[20] = vmaxf(tmp, array[20]);
764     tmp = vminf(array[21], array[24]);
765     array[24] = vmaxf(array[21], array[24]);
766     array[21] = tmp;
767     tmp = vminf(array[18], array[24]);
768     array[24] = vmaxf(array[18], array[24]);
769     array[18] = vminf(tmp, array[21]);
770     array[21] = vmaxf(tmp, array[21]);
771     tmp = vminf(array[19], array[22]);
772     array[22] = vmaxf(array[19], array[22]);
773     array[19] = tmp;
774     array[17] = vmaxf(array[8], array[17]);
775     tmp = vminf(array[9], array[18]);
776     array[18] = vmaxf(array[9], array[18]);
777     array[9] = tmp;
778     tmp = vminf(array[0], array[18]);
779     array[18] = vmaxf(array[0], array[18]);
780     array[9] = vmaxf(tmp, array[9]);
781     tmp = vminf(array[10], array[19]);
782     array[19] = vmaxf(array[10], array[19]);
783     array[10] = tmp;
784     tmp = vminf(array[1], array[19]);
785     array[19] = vmaxf(array[1], array[19]);
786     array[1] = vminf(tmp, array[10]);
787     array[10] = vmaxf(tmp, array[10]);
788     tmp = vminf(array[11], array[20]);
789     array[20] = vmaxf(array[11], array[20]);
790     array[11] = tmp;
791     tmp = vminf(array[2], array[20]);
792     array[20] = vmaxf(array[2], array[20]);
793     array[11] = vmaxf(tmp, array[11]);
794     tmp = vminf(array[12], array[21]);
795     array[21] = vmaxf(array[12], array[21]);
796     array[12] = tmp;
797     tmp = vminf(array[3], array[21]);
798     array[21] = vmaxf(array[3], array[21]);
799     array[3] = vminf(tmp, array[12]);
800     array[12] = vmaxf(tmp, array[12]);
801     tmp = vminf(array[13], array[22]);
802     array[22] = vmaxf(array[13], array[22]);
803     array[4] = vminf(array[4], array[22]);
804     array[13] = vmaxf(array[4], tmp);
805     tmp = vminf(array[4], tmp);
806     array[4] = tmp;
807     tmp = vminf(array[14], array[23]);
808     array[23] = vmaxf(array[14], array[23]);
809     array[14] = tmp;
810     tmp = vminf(array[5], array[23]);
811     array[23] = vmaxf(array[5], array[23]);
812     array[5] = vminf(tmp, array[14]);
813     array[14] = vmaxf(tmp, array[14]);
814     tmp = vminf(array[15], array[24]);
815     array[24] = vmaxf(array[15], array[24]);
816     array[15] = tmp;
817     array[6] = vminf(array[6], array[24]);
818     tmp = vminf(array[6], array[15]);
819     array[15] = vmaxf(array[6], array[15]);
820     array[6] = tmp;
821     tmp = vminf(array[7], array[16]);
822     array[7] = vminf(tmp, array[19]);
823     tmp = vminf(array[13], array[21]);
824     array[15] = vminf(array[15], array[23]);
825     tmp = vminf(array[7], tmp);
826     array[7] = vminf(tmp, array[15]);
827     array[9] = vmaxf(array[1], array[9]);
828     array[11] = vmaxf(array[3], array[11]);
829     array[17] = vmaxf(array[5], array[17]);
830     array[17] = vmaxf(array[11], array[17]);
831     array[17] = vmaxf(array[9], array[17]);
832     tmp = vminf(array[4], array[10]);
833     array[10] = vmaxf(array[4], array[10]);
834     array[4] = tmp;
835     tmp = vminf(array[6], array[12]);
836     array[12] = vmaxf(array[6], array[12]);
837     array[6] = tmp;
838     tmp = vminf(array[7], array[14]);
839     array[14] = vmaxf(array[7], array[14]);
840     array[7] = tmp;
841     tmp = vminf(array[4], array[6]);
842     array[6] = vmaxf(array[4], array[6]);
843     array[7] = vmaxf(tmp, array[7]);
844     tmp = vminf(array[12], array[14]);
845     array[14] = vmaxf(array[12], array[14]);
846     array[12] = tmp;
847     array[10] = vminf(array[10], array[14]);
848     tmp = vminf(array[6], array[7]);
849     array[7] = vmaxf(array[6], array[7]);
850     array[6] = tmp;
851     tmp = vminf(array[10], array[12]);
852     array[12] = vmaxf(array[10], array[12]);
853     array[10] = vmaxf(array[6], tmp);
854     tmp = vminf(array[6], tmp);
855     array[17] = vmaxf(tmp, array[17]);
856     tmp = vminf(array[12], array[17]);
857     array[17] = vmaxf(array[12], array[17]);
858     array[12] = tmp;
859     array[7] = vminf(array[7], array[17]);
860     tmp = vminf(array[7], array[10]);
861     array[10] = vmaxf(array[7], array[10]);
862     array[7] = tmp;
863     tmp = vminf(array[12], array[18]);
864     array[18] = vmaxf(array[12], array[18]);
865     array[12] = vmaxf(array[7], tmp);
866     array[10] = vminf(array[10], array[18]);
867     tmp = vminf(array[12], array[20]);
868     array[20] = vmaxf(array[12], array[20]);
869     array[12] = tmp;
870     tmp = vminf(array[10], array[20]);
871     return vmaxf(tmp, array[12]);
872 }
873 #endif
874 
875 template<typename T>
median(std::array<T,49> array)876 inline T median(std::array<T, 49> array)
877 {
878     T tmp = std::min(array[0], array[32]);
879     array[32] = std::max(array[0], array[32]);
880     array[0] = tmp;
881     tmp = std::min(array[1], array[33]);
882     array[33] = std::max(array[1], array[33]);
883     array[1] = tmp;
884     tmp = std::min(array[2], array[34]);
885     array[34] = std::max(array[2], array[34]);
886     array[2] = tmp;
887     tmp = std::min(array[3], array[35]);
888     array[35] = std::max(array[3], array[35]);
889     array[3] = tmp;
890     tmp = std::min(array[4], array[36]);
891     array[36] = std::max(array[4], array[36]);
892     array[4] = tmp;
893     tmp = std::min(array[5], array[37]);
894     array[37] = std::max(array[5], array[37]);
895     array[5] = tmp;
896     tmp = std::min(array[6], array[38]);
897     array[38] = std::max(array[6], array[38]);
898     array[6] = tmp;
899     tmp = std::min(array[7], array[39]);
900     array[39] = std::max(array[7], array[39]);
901     array[7] = tmp;
902     tmp = std::min(array[8], array[40]);
903     array[40] = std::max(array[8], array[40]);
904     array[8] = tmp;
905     tmp = std::min(array[9], array[41]);
906     array[41] = std::max(array[9], array[41]);
907     array[9] = tmp;
908     tmp = std::min(array[10], array[42]);
909     array[42] = std::max(array[10], array[42]);
910     array[10] = tmp;
911     tmp = std::min(array[11], array[43]);
912     array[43] = std::max(array[11], array[43]);
913     array[11] = tmp;
914     tmp = std::min(array[12], array[44]);
915     array[44] = std::max(array[12], array[44]);
916     array[12] = tmp;
917     tmp = std::min(array[13], array[45]);
918     array[45] = std::max(array[13], array[45]);
919     array[13] = tmp;
920     tmp = std::min(array[14], array[46]);
921     array[46] = std::max(array[14], array[46]);
922     array[14] = tmp;
923     tmp = std::min(array[15], array[47]);
924     array[47] = std::max(array[15], array[47]);
925     array[15] = tmp;
926     tmp = std::min(array[16], array[48]);
927     array[48] = std::max(array[16], array[48]);
928     array[16] = tmp;
929     tmp = std::min(array[0], array[16]);
930     array[16] = std::max(array[0], array[16]);
931     array[0] = tmp;
932     tmp = std::min(array[1], array[17]);
933     array[17] = std::max(array[1], array[17]);
934     array[1] = tmp;
935     tmp = std::min(array[2], array[18]);
936     array[18] = std::max(array[2], array[18]);
937     array[2] = tmp;
938     tmp = std::min(array[3], array[19]);
939     array[19] = std::max(array[3], array[19]);
940     array[3] = tmp;
941     tmp = std::min(array[4], array[20]);
942     array[20] = std::max(array[4], array[20]);
943     array[4] = tmp;
944     tmp = std::min(array[5], array[21]);
945     array[21] = std::max(array[5], array[21]);
946     array[5] = tmp;
947     tmp = std::min(array[6], array[22]);
948     array[22] = std::max(array[6], array[22]);
949     array[6] = tmp;
950     tmp = std::min(array[7], array[23]);
951     array[23] = std::max(array[7], array[23]);
952     array[7] = tmp;
953     tmp = std::min(array[8], array[24]);
954     array[24] = std::max(array[8], array[24]);
955     array[8] = tmp;
956     tmp = std::min(array[9], array[25]);
957     array[25] = std::max(array[9], array[25]);
958     array[9] = tmp;
959     tmp = std::min(array[10], array[26]);
960     array[26] = std::max(array[10], array[26]);
961     array[10] = tmp;
962     tmp = std::min(array[11], array[27]);
963     array[27] = std::max(array[11], array[27]);
964     array[11] = tmp;
965     tmp = std::min(array[12], array[28]);
966     array[28] = std::max(array[12], array[28]);
967     array[12] = tmp;
968     tmp = std::min(array[13], array[29]);
969     array[29] = std::max(array[13], array[29]);
970     array[13] = tmp;
971     tmp = std::min(array[14], array[30]);
972     array[30] = std::max(array[14], array[30]);
973     array[14] = tmp;
974     tmp = std::min(array[15], array[31]);
975     array[31] = std::max(array[15], array[31]);
976     array[15] = tmp;
977     tmp = std::min(array[32], array[48]);
978     array[48] = std::max(array[32], array[48]);
979     array[32] = tmp;
980     tmp = std::min(array[16], array[32]);
981     array[32] = std::max(array[16], array[32]);
982     array[16] = tmp;
983     tmp = std::min(array[17], array[33]);
984     array[33] = std::max(array[17], array[33]);
985     array[17] = tmp;
986     tmp = std::min(array[18], array[34]);
987     array[34] = std::max(array[18], array[34]);
988     array[18] = tmp;
989     tmp = std::min(array[19], array[35]);
990     array[35] = std::max(array[19], array[35]);
991     array[19] = tmp;
992     tmp = std::min(array[20], array[36]);
993     array[36] = std::max(array[20], array[36]);
994     array[20] = tmp;
995     tmp = std::min(array[21], array[37]);
996     array[37] = std::max(array[21], array[37]);
997     array[21] = tmp;
998     tmp = std::min(array[22], array[38]);
999     array[38] = std::max(array[22], array[38]);
1000     array[22] = tmp;
1001     tmp = std::min(array[23], array[39]);
1002     array[39] = std::max(array[23], array[39]);
1003     array[23] = tmp;
1004     tmp = std::min(array[24], array[40]);
1005     array[40] = std::max(array[24], array[40]);
1006     array[24] = tmp;
1007     tmp = std::min(array[25], array[41]);
1008     array[41] = std::max(array[25], array[41]);
1009     array[25] = tmp;
1010     tmp = std::min(array[26], array[42]);
1011     array[42] = std::max(array[26], array[42]);
1012     array[26] = tmp;
1013     tmp = std::min(array[27], array[43]);
1014     array[43] = std::max(array[27], array[43]);
1015     array[27] = tmp;
1016     tmp = std::min(array[28], array[44]);
1017     array[44] = std::max(array[28], array[44]);
1018     array[28] = tmp;
1019     tmp = std::min(array[29], array[45]);
1020     array[45] = std::max(array[29], array[45]);
1021     array[29] = tmp;
1022     tmp = std::min(array[30], array[46]);
1023     array[46] = std::max(array[30], array[46]);
1024     array[30] = tmp;
1025     tmp = std::min(array[31], array[47]);
1026     array[47] = std::max(array[31], array[47]);
1027     array[31] = tmp;
1028     tmp = std::min(array[0], array[8]);
1029     array[8] = std::max(array[0], array[8]);
1030     array[0] = tmp;
1031     tmp = std::min(array[1], array[9]);
1032     array[9] = std::max(array[1], array[9]);
1033     array[1] = tmp;
1034     tmp = std::min(array[2], array[10]);
1035     array[10] = std::max(array[2], array[10]);
1036     array[2] = tmp;
1037     tmp = std::min(array[3], array[11]);
1038     array[11] = std::max(array[3], array[11]);
1039     array[3] = tmp;
1040     tmp = std::min(array[4], array[12]);
1041     array[12] = std::max(array[4], array[12]);
1042     array[4] = tmp;
1043     tmp = std::min(array[5], array[13]);
1044     array[13] = std::max(array[5], array[13]);
1045     array[5] = tmp;
1046     tmp = std::min(array[6], array[14]);
1047     array[14] = std::max(array[6], array[14]);
1048     array[6] = tmp;
1049     tmp = std::min(array[7], array[15]);
1050     array[15] = std::max(array[7], array[15]);
1051     array[7] = tmp;
1052     tmp = std::min(array[16], array[24]);
1053     array[24] = std::max(array[16], array[24]);
1054     array[16] = tmp;
1055     tmp = std::min(array[17], array[25]);
1056     array[25] = std::max(array[17], array[25]);
1057     array[17] = tmp;
1058     tmp = std::min(array[18], array[26]);
1059     array[26] = std::max(array[18], array[26]);
1060     array[18] = tmp;
1061     tmp = std::min(array[19], array[27]);
1062     array[27] = std::max(array[19], array[27]);
1063     array[19] = tmp;
1064     tmp = std::min(array[20], array[28]);
1065     array[28] = std::max(array[20], array[28]);
1066     array[20] = tmp;
1067     tmp = std::min(array[21], array[29]);
1068     array[29] = std::max(array[21], array[29]);
1069     array[21] = tmp;
1070     tmp = std::min(array[22], array[30]);
1071     array[30] = std::max(array[22], array[30]);
1072     array[22] = tmp;
1073     tmp = std::min(array[23], array[31]);
1074     array[31] = std::max(array[23], array[31]);
1075     array[23] = tmp;
1076     tmp = std::min(array[32], array[40]);
1077     array[40] = std::max(array[32], array[40]);
1078     array[32] = tmp;
1079     tmp = std::min(array[33], array[41]);
1080     array[41] = std::max(array[33], array[41]);
1081     array[33] = tmp;
1082     tmp = std::min(array[34], array[42]);
1083     array[42] = std::max(array[34], array[42]);
1084     array[34] = tmp;
1085     tmp = std::min(array[35], array[43]);
1086     array[43] = std::max(array[35], array[43]);
1087     array[35] = tmp;
1088     tmp = std::min(array[36], array[44]);
1089     array[44] = std::max(array[36], array[44]);
1090     array[36] = tmp;
1091     tmp = std::min(array[37], array[45]);
1092     array[45] = std::max(array[37], array[45]);
1093     array[37] = tmp;
1094     tmp = std::min(array[38], array[46]);
1095     array[46] = std::max(array[38], array[46]);
1096     array[38] = tmp;
1097     tmp = std::min(array[39], array[47]);
1098     array[47] = std::max(array[39], array[47]);
1099     array[39] = tmp;
1100     tmp = std::min(array[8], array[32]);
1101     array[32] = std::max(array[8], array[32]);
1102     array[8] = tmp;
1103     tmp = std::min(array[9], array[33]);
1104     array[33] = std::max(array[9], array[33]);
1105     array[9] = tmp;
1106     tmp = std::min(array[10], array[34]);
1107     array[34] = std::max(array[10], array[34]);
1108     array[10] = tmp;
1109     tmp = std::min(array[11], array[35]);
1110     array[35] = std::max(array[11], array[35]);
1111     array[11] = tmp;
1112     tmp = std::min(array[12], array[36]);
1113     array[36] = std::max(array[12], array[36]);
1114     array[12] = tmp;
1115     tmp = std::min(array[13], array[37]);
1116     array[37] = std::max(array[13], array[37]);
1117     array[13] = tmp;
1118     tmp = std::min(array[14], array[38]);
1119     array[38] = std::max(array[14], array[38]);
1120     array[14] = tmp;
1121     tmp = std::min(array[15], array[39]);
1122     array[39] = std::max(array[15], array[39]);
1123     array[15] = tmp;
1124     tmp = std::min(array[24], array[48]);
1125     array[48] = std::max(array[24], array[48]);
1126     array[24] = tmp;
1127     tmp = std::min(array[8], array[16]);
1128     array[16] = std::max(array[8], array[16]);
1129     array[8] = tmp;
1130     tmp = std::min(array[9], array[17]);
1131     array[17] = std::max(array[9], array[17]);
1132     array[9] = tmp;
1133     tmp = std::min(array[10], array[18]);
1134     array[18] = std::max(array[10], array[18]);
1135     array[10] = tmp;
1136     tmp = std::min(array[11], array[19]);
1137     array[19] = std::max(array[11], array[19]);
1138     array[11] = tmp;
1139     tmp = std::min(array[12], array[20]);
1140     array[20] = std::max(array[12], array[20]);
1141     array[12] = tmp;
1142     tmp = std::min(array[13], array[21]);
1143     array[21] = std::max(array[13], array[21]);
1144     array[13] = tmp;
1145     tmp = std::min(array[14], array[22]);
1146     array[22] = std::max(array[14], array[22]);
1147     array[14] = tmp;
1148     tmp = std::min(array[15], array[23]);
1149     array[23] = std::max(array[15], array[23]);
1150     array[15] = tmp;
1151     tmp = std::min(array[24], array[32]);
1152     array[32] = std::max(array[24], array[32]);
1153     array[24] = tmp;
1154     tmp = std::min(array[25], array[33]);
1155     array[33] = std::max(array[25], array[33]);
1156     array[25] = tmp;
1157     tmp = std::min(array[26], array[34]);
1158     array[34] = std::max(array[26], array[34]);
1159     array[26] = tmp;
1160     tmp = std::min(array[27], array[35]);
1161     array[35] = std::max(array[27], array[35]);
1162     array[27] = tmp;
1163     tmp = std::min(array[28], array[36]);
1164     array[36] = std::max(array[28], array[36]);
1165     array[28] = tmp;
1166     tmp = std::min(array[29], array[37]);
1167     array[37] = std::max(array[29], array[37]);
1168     array[29] = tmp;
1169     tmp = std::min(array[30], array[38]);
1170     array[38] = std::max(array[30], array[38]);
1171     array[30] = tmp;
1172     tmp = std::min(array[31], array[39]);
1173     array[39] = std::max(array[31], array[39]);
1174     array[31] = tmp;
1175     tmp = std::min(array[40], array[48]);
1176     array[48] = std::max(array[40], array[48]);
1177     array[40] = tmp;
1178     tmp = std::min(array[0], array[4]);
1179     array[4] = std::max(array[0], array[4]);
1180     array[0] = tmp;
1181     tmp = std::min(array[1], array[5]);
1182     array[5] = std::max(array[1], array[5]);
1183     array[1] = tmp;
1184     tmp = std::min(array[2], array[6]);
1185     array[6] = std::max(array[2], array[6]);
1186     array[2] = tmp;
1187     tmp = std::min(array[3], array[7]);
1188     array[7] = std::max(array[3], array[7]);
1189     array[3] = tmp;
1190     tmp = std::min(array[8], array[12]);
1191     array[12] = std::max(array[8], array[12]);
1192     array[8] = tmp;
1193     tmp = std::min(array[9], array[13]);
1194     array[13] = std::max(array[9], array[13]);
1195     array[9] = tmp;
1196     tmp = std::min(array[10], array[14]);
1197     array[14] = std::max(array[10], array[14]);
1198     array[10] = tmp;
1199     tmp = std::min(array[11], array[15]);
1200     array[15] = std::max(array[11], array[15]);
1201     array[11] = tmp;
1202     tmp = std::min(array[16], array[20]);
1203     array[20] = std::max(array[16], array[20]);
1204     array[16] = tmp;
1205     tmp = std::min(array[17], array[21]);
1206     array[21] = std::max(array[17], array[21]);
1207     array[17] = tmp;
1208     tmp = std::min(array[18], array[22]);
1209     array[22] = std::max(array[18], array[22]);
1210     array[18] = tmp;
1211     tmp = std::min(array[19], array[23]);
1212     array[23] = std::max(array[19], array[23]);
1213     array[19] = tmp;
1214     tmp = std::min(array[24], array[28]);
1215     array[28] = std::max(array[24], array[28]);
1216     array[24] = tmp;
1217     tmp = std::min(array[25], array[29]);
1218     array[29] = std::max(array[25], array[29]);
1219     array[25] = tmp;
1220     tmp = std::min(array[26], array[30]);
1221     array[30] = std::max(array[26], array[30]);
1222     array[26] = tmp;
1223     tmp = std::min(array[27], array[31]);
1224     array[31] = std::max(array[27], array[31]);
1225     array[27] = tmp;
1226     tmp = std::min(array[32], array[36]);
1227     array[36] = std::max(array[32], array[36]);
1228     array[32] = tmp;
1229     tmp = std::min(array[33], array[37]);
1230     array[37] = std::max(array[33], array[37]);
1231     array[33] = tmp;
1232     tmp = std::min(array[34], array[38]);
1233     array[38] = std::max(array[34], array[38]);
1234     array[34] = tmp;
1235     tmp = std::min(array[35], array[39]);
1236     array[39] = std::max(array[35], array[39]);
1237     array[35] = tmp;
1238     tmp = std::min(array[40], array[44]);
1239     array[44] = std::max(array[40], array[44]);
1240     array[40] = tmp;
1241     tmp = std::min(array[41], array[45]);
1242     array[45] = std::max(array[41], array[45]);
1243     array[41] = tmp;
1244     tmp = std::min(array[42], array[46]);
1245     array[46] = std::max(array[42], array[46]);
1246     array[42] = tmp;
1247     tmp = std::min(array[43], array[47]);
1248     array[47] = std::max(array[43], array[47]);
1249     array[43] = tmp;
1250     tmp = std::min(array[4], array[32]);
1251     array[32] = std::max(array[4], array[32]);
1252     array[4] = tmp;
1253     tmp = std::min(array[5], array[33]);
1254     array[33] = std::max(array[5], array[33]);
1255     array[5] = tmp;
1256     tmp = std::min(array[6], array[34]);
1257     array[34] = std::max(array[6], array[34]);
1258     array[6] = tmp;
1259     tmp = std::min(array[7], array[35]);
1260     array[35] = std::max(array[7], array[35]);
1261     array[7] = tmp;
1262     tmp = std::min(array[12], array[40]);
1263     array[40] = std::max(array[12], array[40]);
1264     array[12] = tmp;
1265     tmp = std::min(array[13], array[41]);
1266     array[41] = std::max(array[13], array[41]);
1267     array[13] = tmp;
1268     tmp = std::min(array[14], array[42]);
1269     array[42] = std::max(array[14], array[42]);
1270     array[14] = tmp;
1271     tmp = std::min(array[15], array[43]);
1272     array[43] = std::max(array[15], array[43]);
1273     array[15] = tmp;
1274     tmp = std::min(array[20], array[48]);
1275     array[48] = std::max(array[20], array[48]);
1276     array[20] = tmp;
1277     tmp = std::min(array[4], array[16]);
1278     array[16] = std::max(array[4], array[16]);
1279     array[4] = tmp;
1280     tmp = std::min(array[5], array[17]);
1281     array[17] = std::max(array[5], array[17]);
1282     array[5] = tmp;
1283     tmp = std::min(array[6], array[18]);
1284     array[18] = std::max(array[6], array[18]);
1285     array[6] = tmp;
1286     tmp = std::min(array[7], array[19]);
1287     array[19] = std::max(array[7], array[19]);
1288     array[7] = tmp;
1289     tmp = std::min(array[12], array[24]);
1290     array[24] = std::max(array[12], array[24]);
1291     array[12] = tmp;
1292     tmp = std::min(array[13], array[25]);
1293     array[25] = std::max(array[13], array[25]);
1294     array[13] = tmp;
1295     tmp = std::min(array[14], array[26]);
1296     array[26] = std::max(array[14], array[26]);
1297     array[14] = tmp;
1298     tmp = std::min(array[15], array[27]);
1299     array[27] = std::max(array[15], array[27]);
1300     array[15] = tmp;
1301     tmp = std::min(array[20], array[32]);
1302     array[32] = std::max(array[20], array[32]);
1303     array[20] = tmp;
1304     tmp = std::min(array[21], array[33]);
1305     array[33] = std::max(array[21], array[33]);
1306     array[21] = tmp;
1307     tmp = std::min(array[22], array[34]);
1308     array[34] = std::max(array[22], array[34]);
1309     array[22] = tmp;
1310     tmp = std::min(array[23], array[35]);
1311     array[35] = std::max(array[23], array[35]);
1312     array[23] = tmp;
1313     tmp = std::min(array[28], array[40]);
1314     array[40] = std::max(array[28], array[40]);
1315     array[28] = tmp;
1316     tmp = std::min(array[29], array[41]);
1317     array[41] = std::max(array[29], array[41]);
1318     array[29] = tmp;
1319     tmp = std::min(array[30], array[42]);
1320     array[42] = std::max(array[30], array[42]);
1321     array[30] = tmp;
1322     tmp = std::min(array[31], array[43]);
1323     array[43] = std::max(array[31], array[43]);
1324     array[31] = tmp;
1325     tmp = std::min(array[36], array[48]);
1326     array[48] = std::max(array[36], array[48]);
1327     array[36] = tmp;
1328     tmp = std::min(array[4], array[8]);
1329     array[8] = std::max(array[4], array[8]);
1330     array[4] = tmp;
1331     tmp = std::min(array[5], array[9]);
1332     array[9] = std::max(array[5], array[9]);
1333     array[5] = tmp;
1334     tmp = std::min(array[6], array[10]);
1335     array[10] = std::max(array[6], array[10]);
1336     array[6] = tmp;
1337     tmp = std::min(array[7], array[11]);
1338     array[11] = std::max(array[7], array[11]);
1339     array[7] = tmp;
1340     tmp = std::min(array[12], array[16]);
1341     array[16] = std::max(array[12], array[16]);
1342     array[12] = tmp;
1343     tmp = std::min(array[13], array[17]);
1344     array[17] = std::max(array[13], array[17]);
1345     array[13] = tmp;
1346     tmp = std::min(array[14], array[18]);
1347     array[18] = std::max(array[14], array[18]);
1348     array[14] = tmp;
1349     tmp = std::min(array[15], array[19]);
1350     array[19] = std::max(array[15], array[19]);
1351     array[15] = tmp;
1352     tmp = std::min(array[20], array[24]);
1353     array[24] = std::max(array[20], array[24]);
1354     array[20] = tmp;
1355     tmp = std::min(array[21], array[25]);
1356     array[25] = std::max(array[21], array[25]);
1357     array[21] = tmp;
1358     tmp = std::min(array[22], array[26]);
1359     array[26] = std::max(array[22], array[26]);
1360     array[22] = tmp;
1361     tmp = std::min(array[23], array[27]);
1362     array[27] = std::max(array[23], array[27]);
1363     array[23] = tmp;
1364     tmp = std::min(array[28], array[32]);
1365     array[32] = std::max(array[28], array[32]);
1366     array[28] = tmp;
1367     tmp = std::min(array[29], array[33]);
1368     array[33] = std::max(array[29], array[33]);
1369     array[29] = tmp;
1370     tmp = std::min(array[30], array[34]);
1371     array[34] = std::max(array[30], array[34]);
1372     array[30] = tmp;
1373     tmp = std::min(array[31], array[35]);
1374     array[35] = std::max(array[31], array[35]);
1375     array[31] = tmp;
1376     tmp = std::min(array[36], array[40]);
1377     array[40] = std::max(array[36], array[40]);
1378     array[36] = tmp;
1379     tmp = std::min(array[37], array[41]);
1380     array[41] = std::max(array[37], array[41]);
1381     array[37] = tmp;
1382     tmp = std::min(array[38], array[42]);
1383     array[42] = std::max(array[38], array[42]);
1384     array[38] = tmp;
1385     tmp = std::min(array[39], array[43]);
1386     array[43] = std::max(array[39], array[43]);
1387     array[39] = tmp;
1388     tmp = std::min(array[44], array[48]);
1389     array[48] = std::max(array[44], array[48]);
1390     array[44] = tmp;
1391     tmp = std::min(array[0], array[2]);
1392     array[2] = std::max(array[0], array[2]);
1393     array[0] = tmp;
1394     tmp = std::min(array[1], array[3]);
1395     array[3] = std::max(array[1], array[3]);
1396     array[1] = tmp;
1397     tmp = std::min(array[4], array[6]);
1398     array[6] = std::max(array[4], array[6]);
1399     array[4] = tmp;
1400     tmp = std::min(array[5], array[7]);
1401     array[7] = std::max(array[5], array[7]);
1402     array[5] = tmp;
1403     tmp = std::min(array[8], array[10]);
1404     array[10] = std::max(array[8], array[10]);
1405     array[8] = tmp;
1406     tmp = std::min(array[9], array[11]);
1407     array[11] = std::max(array[9], array[11]);
1408     array[9] = tmp;
1409     tmp = std::min(array[12], array[14]);
1410     array[14] = std::max(array[12], array[14]);
1411     array[12] = tmp;
1412     tmp = std::min(array[13], array[15]);
1413     array[15] = std::max(array[13], array[15]);
1414     array[13] = tmp;
1415     tmp = std::min(array[16], array[18]);
1416     array[18] = std::max(array[16], array[18]);
1417     array[16] = tmp;
1418     tmp = std::min(array[17], array[19]);
1419     array[19] = std::max(array[17], array[19]);
1420     array[17] = tmp;
1421     tmp = std::min(array[20], array[22]);
1422     array[22] = std::max(array[20], array[22]);
1423     array[20] = tmp;
1424     tmp = std::min(array[21], array[23]);
1425     array[23] = std::max(array[21], array[23]);
1426     array[21] = tmp;
1427     tmp = std::min(array[24], array[26]);
1428     array[26] = std::max(array[24], array[26]);
1429     array[24] = tmp;
1430     tmp = std::min(array[25], array[27]);
1431     array[27] = std::max(array[25], array[27]);
1432     array[25] = tmp;
1433     tmp = std::min(array[28], array[30]);
1434     array[30] = std::max(array[28], array[30]);
1435     array[28] = tmp;
1436     tmp = std::min(array[29], array[31]);
1437     array[31] = std::max(array[29], array[31]);
1438     array[29] = tmp;
1439     tmp = std::min(array[32], array[34]);
1440     array[34] = std::max(array[32], array[34]);
1441     array[32] = tmp;
1442     tmp = std::min(array[33], array[35]);
1443     array[35] = std::max(array[33], array[35]);
1444     array[33] = tmp;
1445     tmp = std::min(array[36], array[38]);
1446     array[38] = std::max(array[36], array[38]);
1447     array[36] = tmp;
1448     tmp = std::min(array[37], array[39]);
1449     array[39] = std::max(array[37], array[39]);
1450     array[37] = tmp;
1451     tmp = std::min(array[40], array[42]);
1452     array[42] = std::max(array[40], array[42]);
1453     array[40] = tmp;
1454     tmp = std::min(array[41], array[43]);
1455     array[43] = std::max(array[41], array[43]);
1456     array[41] = tmp;
1457     tmp = std::min(array[44], array[46]);
1458     array[46] = std::max(array[44], array[46]);
1459     array[44] = tmp;
1460     tmp = std::min(array[45], array[47]);
1461     array[47] = std::max(array[45], array[47]);
1462     array[45] = tmp;
1463     tmp = std::min(array[2], array[32]);
1464     array[32] = std::max(array[2], array[32]);
1465     array[2] = tmp;
1466     tmp = std::min(array[3], array[33]);
1467     array[33] = std::max(array[3], array[33]);
1468     array[3] = tmp;
1469     tmp = std::min(array[6], array[36]);
1470     array[36] = std::max(array[6], array[36]);
1471     array[6] = tmp;
1472     tmp = std::min(array[7], array[37]);
1473     array[37] = std::max(array[7], array[37]);
1474     array[7] = tmp;
1475     tmp = std::min(array[10], array[40]);
1476     array[40] = std::max(array[10], array[40]);
1477     array[10] = tmp;
1478     tmp = std::min(array[11], array[41]);
1479     array[41] = std::max(array[11], array[41]);
1480     array[11] = tmp;
1481     tmp = std::min(array[14], array[44]);
1482     array[44] = std::max(array[14], array[44]);
1483     array[14] = tmp;
1484     tmp = std::min(array[15], array[45]);
1485     array[45] = std::max(array[15], array[45]);
1486     array[15] = tmp;
1487     tmp = std::min(array[18], array[48]);
1488     array[48] = std::max(array[18], array[48]);
1489     array[18] = tmp;
1490     tmp = std::min(array[2], array[16]);
1491     array[16] = std::max(array[2], array[16]);
1492     array[2] = tmp;
1493     tmp = std::min(array[3], array[17]);
1494     array[17] = std::max(array[3], array[17]);
1495     array[3] = tmp;
1496     tmp = std::min(array[6], array[20]);
1497     array[20] = std::max(array[6], array[20]);
1498     array[6] = tmp;
1499     tmp = std::min(array[7], array[21]);
1500     array[21] = std::max(array[7], array[21]);
1501     array[7] = tmp;
1502     tmp = std::min(array[10], array[24]);
1503     array[24] = std::max(array[10], array[24]);
1504     array[10] = tmp;
1505     tmp = std::min(array[11], array[25]);
1506     array[25] = std::max(array[11], array[25]);
1507     array[11] = tmp;
1508     tmp = std::min(array[14], array[28]);
1509     array[28] = std::max(array[14], array[28]);
1510     array[14] = tmp;
1511     tmp = std::min(array[15], array[29]);
1512     array[29] = std::max(array[15], array[29]);
1513     array[15] = tmp;
1514     tmp = std::min(array[18], array[32]);
1515     array[32] = std::max(array[18], array[32]);
1516     array[18] = tmp;
1517     tmp = std::min(array[19], array[33]);
1518     array[33] = std::max(array[19], array[33]);
1519     array[19] = tmp;
1520     tmp = std::min(array[22], array[36]);
1521     array[36] = std::max(array[22], array[36]);
1522     array[22] = tmp;
1523     tmp = std::min(array[23], array[37]);
1524     array[37] = std::max(array[23], array[37]);
1525     array[23] = tmp;
1526     tmp = std::min(array[26], array[40]);
1527     array[40] = std::max(array[26], array[40]);
1528     array[26] = tmp;
1529     tmp = std::min(array[27], array[41]);
1530     array[41] = std::max(array[27], array[41]);
1531     array[27] = tmp;
1532     tmp = std::min(array[30], array[44]);
1533     array[44] = std::max(array[30], array[44]);
1534     array[30] = tmp;
1535     tmp = std::min(array[31], array[45]);
1536     array[45] = std::max(array[31], array[45]);
1537     array[31] = tmp;
1538     tmp = std::min(array[34], array[48]);
1539     array[48] = std::max(array[34], array[48]);
1540     array[34] = tmp;
1541     tmp = std::min(array[2], array[8]);
1542     array[8] = std::max(array[2], array[8]);
1543     array[2] = tmp;
1544     tmp = std::min(array[3], array[9]);
1545     array[9] = std::max(array[3], array[9]);
1546     array[3] = tmp;
1547     tmp = std::min(array[6], array[12]);
1548     array[12] = std::max(array[6], array[12]);
1549     array[6] = tmp;
1550     tmp = std::min(array[7], array[13]);
1551     array[13] = std::max(array[7], array[13]);
1552     array[7] = tmp;
1553     tmp = std::min(array[10], array[16]);
1554     array[16] = std::max(array[10], array[16]);
1555     array[10] = tmp;
1556     tmp = std::min(array[11], array[17]);
1557     array[17] = std::max(array[11], array[17]);
1558     array[11] = tmp;
1559     tmp = std::min(array[14], array[20]);
1560     array[20] = std::max(array[14], array[20]);
1561     array[14] = tmp;
1562     tmp = std::min(array[15], array[21]);
1563     array[21] = std::max(array[15], array[21]);
1564     array[15] = tmp;
1565     tmp = std::min(array[18], array[24]);
1566     array[24] = std::max(array[18], array[24]);
1567     array[18] = tmp;
1568     tmp = std::min(array[19], array[25]);
1569     array[25] = std::max(array[19], array[25]);
1570     array[19] = tmp;
1571     tmp = std::min(array[22], array[28]);
1572     array[28] = std::max(array[22], array[28]);
1573     array[22] = tmp;
1574     tmp = std::min(array[23], array[29]);
1575     array[29] = std::max(array[23], array[29]);
1576     array[23] = tmp;
1577     tmp = std::min(array[26], array[32]);
1578     array[32] = std::max(array[26], array[32]);
1579     array[26] = tmp;
1580     tmp = std::min(array[27], array[33]);
1581     array[33] = std::max(array[27], array[33]);
1582     array[27] = tmp;
1583     tmp = std::min(array[30], array[36]);
1584     array[36] = std::max(array[30], array[36]);
1585     array[30] = tmp;
1586     tmp = std::min(array[31], array[37]);
1587     array[37] = std::max(array[31], array[37]);
1588     array[31] = tmp;
1589     tmp = std::min(array[34], array[40]);
1590     array[40] = std::max(array[34], array[40]);
1591     array[34] = tmp;
1592     tmp = std::min(array[35], array[41]);
1593     array[41] = std::max(array[35], array[41]);
1594     array[35] = tmp;
1595     tmp = std::min(array[38], array[44]);
1596     array[44] = std::max(array[38], array[44]);
1597     array[38] = tmp;
1598     tmp = std::min(array[39], array[45]);
1599     array[45] = std::max(array[39], array[45]);
1600     array[39] = tmp;
1601     tmp = std::min(array[42], array[48]);
1602     array[48] = std::max(array[42], array[48]);
1603     array[42] = tmp;
1604     tmp = std::min(array[2], array[4]);
1605     array[4] = std::max(array[2], array[4]);
1606     array[2] = tmp;
1607     tmp = std::min(array[3], array[5]);
1608     array[5] = std::max(array[3], array[5]);
1609     array[3] = tmp;
1610     tmp = std::min(array[6], array[8]);
1611     array[8] = std::max(array[6], array[8]);
1612     array[6] = tmp;
1613     tmp = std::min(array[7], array[9]);
1614     array[9] = std::max(array[7], array[9]);
1615     array[7] = tmp;
1616     tmp = std::min(array[10], array[12]);
1617     array[12] = std::max(array[10], array[12]);
1618     array[10] = tmp;
1619     tmp = std::min(array[11], array[13]);
1620     array[13] = std::max(array[11], array[13]);
1621     array[11] = tmp;
1622     tmp = std::min(array[14], array[16]);
1623     array[16] = std::max(array[14], array[16]);
1624     array[14] = tmp;
1625     tmp = std::min(array[15], array[17]);
1626     array[17] = std::max(array[15], array[17]);
1627     array[15] = tmp;
1628     tmp = std::min(array[18], array[20]);
1629     array[20] = std::max(array[18], array[20]);
1630     array[18] = tmp;
1631     tmp = std::min(array[19], array[21]);
1632     array[21] = std::max(array[19], array[21]);
1633     array[19] = tmp;
1634     tmp = std::min(array[22], array[24]);
1635     array[24] = std::max(array[22], array[24]);
1636     array[22] = tmp;
1637     tmp = std::min(array[23], array[25]);
1638     array[25] = std::max(array[23], array[25]);
1639     array[23] = tmp;
1640     tmp = std::min(array[26], array[28]);
1641     array[28] = std::max(array[26], array[28]);
1642     array[26] = tmp;
1643     tmp = std::min(array[27], array[29]);
1644     array[29] = std::max(array[27], array[29]);
1645     array[27] = tmp;
1646     tmp = std::min(array[30], array[32]);
1647     array[32] = std::max(array[30], array[32]);
1648     array[30] = tmp;
1649     tmp = std::min(array[31], array[33]);
1650     array[33] = std::max(array[31], array[33]);
1651     array[31] = tmp;
1652     tmp = std::min(array[34], array[36]);
1653     array[36] = std::max(array[34], array[36]);
1654     array[34] = tmp;
1655     tmp = std::min(array[35], array[37]);
1656     array[37] = std::max(array[35], array[37]);
1657     array[35] = tmp;
1658     tmp = std::min(array[38], array[40]);
1659     array[40] = std::max(array[38], array[40]);
1660     array[38] = tmp;
1661     tmp = std::min(array[39], array[41]);
1662     array[41] = std::max(array[39], array[41]);
1663     array[39] = tmp;
1664     tmp = std::min(array[42], array[44]);
1665     array[44] = std::max(array[42], array[44]);
1666     array[42] = tmp;
1667     tmp = std::min(array[43], array[45]);
1668     array[45] = std::max(array[43], array[45]);
1669     array[43] = tmp;
1670     tmp = std::min(array[46], array[48]);
1671     array[48] = std::max(array[46], array[48]);
1672     array[46] = tmp;
1673     array[1] = std::max(array[0], array[1]);
1674     array[3] = std::max(array[2], array[3]);
1675     array[5] = std::max(array[4], array[5]);
1676     array[7] = std::max(array[6], array[7]);
1677     array[9] = std::max(array[8], array[9]);
1678     array[11] = std::max(array[10], array[11]);
1679     array[13] = std::max(array[12], array[13]);
1680     array[15] = std::max(array[14], array[15]);
1681     array[17] = std::max(array[16], array[17]);
1682     array[19] = std::max(array[18], array[19]);
1683     array[21] = std::max(array[20], array[21]);
1684     array[23] = std::max(array[22], array[23]);
1685     array[24] = std::min(array[24], array[25]);
1686     array[26] = std::min(array[26], array[27]);
1687     array[28] = std::min(array[28], array[29]);
1688     array[30] = std::min(array[30], array[31]);
1689     array[32] = std::min(array[32], array[33]);
1690     array[34] = std::min(array[34], array[35]);
1691     array[36] = std::min(array[36], array[37]);
1692     array[38] = std::min(array[38], array[39]);
1693     array[40] = std::min(array[40], array[41]);
1694     array[42] = std::min(array[42], array[43]);
1695     array[44] = std::min(array[44], array[45]);
1696     array[46] = std::min(array[46], array[47]);
1697     array[32] = std::max(array[1], array[32]);
1698     array[34] = std::max(array[3], array[34]);
1699     array[36] = std::max(array[5], array[36]);
1700     array[38] = std::max(array[7], array[38]);
1701     array[9] = std::min(array[9], array[40]);
1702     array[11] = std::min(array[11], array[42]);
1703     array[13] = std::min(array[13], array[44]);
1704     array[15] = std::min(array[15], array[46]);
1705     array[17] = std::min(array[17], array[48]);
1706     array[24] = std::max(array[9], array[24]);
1707     array[26] = std::max(array[11], array[26]);
1708     array[28] = std::max(array[13], array[28]);
1709     array[30] = std::max(array[15], array[30]);
1710     array[17] = std::min(array[17], array[32]);
1711     array[19] = std::min(array[19], array[34]);
1712     array[21] = std::min(array[21], array[36]);
1713     array[23] = std::min(array[23], array[38]);
1714     array[24] = std::max(array[17], array[24]);
1715     array[26] = std::max(array[19], array[26]);
1716     array[21] = std::min(array[21], array[28]);
1717     array[23] = std::min(array[23], array[30]);
1718     array[24] = std::max(array[21], array[24]);
1719     array[23] = std::min(array[23], array[26]);
1720     return std::max(array[23], array[24]);
1721 }
1722 
1723 #ifdef __SSE2__
1724 template<>
median(std::array<vfloat,49> array)1725 inline vfloat median(std::array<vfloat, 49> array)
1726 {
1727     vfloat tmp = vminf(array[0], array[32]);
1728     array[32] = vmaxf(array[0], array[32]);
1729     array[0] = tmp;
1730     tmp = vminf(array[1], array[33]);
1731     array[33] = vmaxf(array[1], array[33]);
1732     array[1] = tmp;
1733     tmp = vminf(array[2], array[34]);
1734     array[34] = vmaxf(array[2], array[34]);
1735     array[2] = tmp;
1736     tmp = vminf(array[3], array[35]);
1737     array[35] = vmaxf(array[3], array[35]);
1738     array[3] = tmp;
1739     tmp = vminf(array[4], array[36]);
1740     array[36] = vmaxf(array[4], array[36]);
1741     array[4] = tmp;
1742     tmp = vminf(array[5], array[37]);
1743     array[37] = vmaxf(array[5], array[37]);
1744     array[5] = tmp;
1745     tmp = vminf(array[6], array[38]);
1746     array[38] = vmaxf(array[6], array[38]);
1747     array[6] = tmp;
1748     tmp = vminf(array[7], array[39]);
1749     array[39] = vmaxf(array[7], array[39]);
1750     array[7] = tmp;
1751     tmp = vminf(array[8], array[40]);
1752     array[40] = vmaxf(array[8], array[40]);
1753     array[8] = tmp;
1754     tmp = vminf(array[9], array[41]);
1755     array[41] = vmaxf(array[9], array[41]);
1756     array[9] = tmp;
1757     tmp = vminf(array[10], array[42]);
1758     array[42] = vmaxf(array[10], array[42]);
1759     array[10] = tmp;
1760     tmp = vminf(array[11], array[43]);
1761     array[43] = vmaxf(array[11], array[43]);
1762     array[11] = tmp;
1763     tmp = vminf(array[12], array[44]);
1764     array[44] = vmaxf(array[12], array[44]);
1765     array[12] = tmp;
1766     tmp = vminf(array[13], array[45]);
1767     array[45] = vmaxf(array[13], array[45]);
1768     array[13] = tmp;
1769     tmp = vminf(array[14], array[46]);
1770     array[46] = vmaxf(array[14], array[46]);
1771     array[14] = tmp;
1772     tmp = vminf(array[15], array[47]);
1773     array[47] = vmaxf(array[15], array[47]);
1774     array[15] = tmp;
1775     tmp = vminf(array[16], array[48]);
1776     array[48] = vmaxf(array[16], array[48]);
1777     array[16] = tmp;
1778     tmp = vminf(array[0], array[16]);
1779     array[16] = vmaxf(array[0], array[16]);
1780     array[0] = tmp;
1781     tmp = vminf(array[1], array[17]);
1782     array[17] = vmaxf(array[1], array[17]);
1783     array[1] = tmp;
1784     tmp = vminf(array[2], array[18]);
1785     array[18] = vmaxf(array[2], array[18]);
1786     array[2] = tmp;
1787     tmp = vminf(array[3], array[19]);
1788     array[19] = vmaxf(array[3], array[19]);
1789     array[3] = tmp;
1790     tmp = vminf(array[4], array[20]);
1791     array[20] = vmaxf(array[4], array[20]);
1792     array[4] = tmp;
1793     tmp = vminf(array[5], array[21]);
1794     array[21] = vmaxf(array[5], array[21]);
1795     array[5] = tmp;
1796     tmp = vminf(array[6], array[22]);
1797     array[22] = vmaxf(array[6], array[22]);
1798     array[6] = tmp;
1799     tmp = vminf(array[7], array[23]);
1800     array[23] = vmaxf(array[7], array[23]);
1801     array[7] = tmp;
1802     tmp = vminf(array[8], array[24]);
1803     array[24] = vmaxf(array[8], array[24]);
1804     array[8] = tmp;
1805     tmp = vminf(array[9], array[25]);
1806     array[25] = vmaxf(array[9], array[25]);
1807     array[9] = tmp;
1808     tmp = vminf(array[10], array[26]);
1809     array[26] = vmaxf(array[10], array[26]);
1810     array[10] = tmp;
1811     tmp = vminf(array[11], array[27]);
1812     array[27] = vmaxf(array[11], array[27]);
1813     array[11] = tmp;
1814     tmp = vminf(array[12], array[28]);
1815     array[28] = vmaxf(array[12], array[28]);
1816     array[12] = tmp;
1817     tmp = vminf(array[13], array[29]);
1818     array[29] = vmaxf(array[13], array[29]);
1819     array[13] = tmp;
1820     tmp = vminf(array[14], array[30]);
1821     array[30] = vmaxf(array[14], array[30]);
1822     array[14] = tmp;
1823     tmp = vminf(array[15], array[31]);
1824     array[31] = vmaxf(array[15], array[31]);
1825     array[15] = tmp;
1826     tmp = vminf(array[32], array[48]);
1827     array[48] = vmaxf(array[32], array[48]);
1828     array[32] = tmp;
1829     tmp = vminf(array[16], array[32]);
1830     array[32] = vmaxf(array[16], array[32]);
1831     array[16] = tmp;
1832     tmp = vminf(array[17], array[33]);
1833     array[33] = vmaxf(array[17], array[33]);
1834     array[17] = tmp;
1835     tmp = vminf(array[18], array[34]);
1836     array[34] = vmaxf(array[18], array[34]);
1837     array[18] = tmp;
1838     tmp = vminf(array[19], array[35]);
1839     array[35] = vmaxf(array[19], array[35]);
1840     array[19] = tmp;
1841     tmp = vminf(array[20], array[36]);
1842     array[36] = vmaxf(array[20], array[36]);
1843     array[20] = tmp;
1844     tmp = vminf(array[21], array[37]);
1845     array[37] = vmaxf(array[21], array[37]);
1846     array[21] = tmp;
1847     tmp = vminf(array[22], array[38]);
1848     array[38] = vmaxf(array[22], array[38]);
1849     array[22] = tmp;
1850     tmp = vminf(array[23], array[39]);
1851     array[39] = vmaxf(array[23], array[39]);
1852     array[23] = tmp;
1853     tmp = vminf(array[24], array[40]);
1854     array[40] = vmaxf(array[24], array[40]);
1855     array[24] = tmp;
1856     tmp = vminf(array[25], array[41]);
1857     array[41] = vmaxf(array[25], array[41]);
1858     array[25] = tmp;
1859     tmp = vminf(array[26], array[42]);
1860     array[42] = vmaxf(array[26], array[42]);
1861     array[26] = tmp;
1862     tmp = vminf(array[27], array[43]);
1863     array[43] = vmaxf(array[27], array[43]);
1864     array[27] = tmp;
1865     tmp = vminf(array[28], array[44]);
1866     array[44] = vmaxf(array[28], array[44]);
1867     array[28] = tmp;
1868     tmp = vminf(array[29], array[45]);
1869     array[45] = vmaxf(array[29], array[45]);
1870     array[29] = tmp;
1871     tmp = vminf(array[30], array[46]);
1872     array[46] = vmaxf(array[30], array[46]);
1873     array[30] = tmp;
1874     tmp = vminf(array[31], array[47]);
1875     array[47] = vmaxf(array[31], array[47]);
1876     array[31] = tmp;
1877     tmp = vminf(array[0], array[8]);
1878     array[8] = vmaxf(array[0], array[8]);
1879     array[0] = tmp;
1880     tmp = vminf(array[1], array[9]);
1881     array[9] = vmaxf(array[1], array[9]);
1882     array[1] = tmp;
1883     tmp = vminf(array[2], array[10]);
1884     array[10] = vmaxf(array[2], array[10]);
1885     array[2] = tmp;
1886     tmp = vminf(array[3], array[11]);
1887     array[11] = vmaxf(array[3], array[11]);
1888     array[3] = tmp;
1889     tmp = vminf(array[4], array[12]);
1890     array[12] = vmaxf(array[4], array[12]);
1891     array[4] = tmp;
1892     tmp = vminf(array[5], array[13]);
1893     array[13] = vmaxf(array[5], array[13]);
1894     array[5] = tmp;
1895     tmp = vminf(array[6], array[14]);
1896     array[14] = vmaxf(array[6], array[14]);
1897     array[6] = tmp;
1898     tmp = vminf(array[7], array[15]);
1899     array[15] = vmaxf(array[7], array[15]);
1900     array[7] = tmp;
1901     tmp = vminf(array[16], array[24]);
1902     array[24] = vmaxf(array[16], array[24]);
1903     array[16] = tmp;
1904     tmp = vminf(array[17], array[25]);
1905     array[25] = vmaxf(array[17], array[25]);
1906     array[17] = tmp;
1907     tmp = vminf(array[18], array[26]);
1908     array[26] = vmaxf(array[18], array[26]);
1909     array[18] = tmp;
1910     tmp = vminf(array[19], array[27]);
1911     array[27] = vmaxf(array[19], array[27]);
1912     array[19] = tmp;
1913     tmp = vminf(array[20], array[28]);
1914     array[28] = vmaxf(array[20], array[28]);
1915     array[20] = tmp;
1916     tmp = vminf(array[21], array[29]);
1917     array[29] = vmaxf(array[21], array[29]);
1918     array[21] = tmp;
1919     tmp = vminf(array[22], array[30]);
1920     array[30] = vmaxf(array[22], array[30]);
1921     array[22] = tmp;
1922     tmp = vminf(array[23], array[31]);
1923     array[31] = vmaxf(array[23], array[31]);
1924     array[23] = tmp;
1925     tmp = vminf(array[32], array[40]);
1926     array[40] = vmaxf(array[32], array[40]);
1927     array[32] = tmp;
1928     tmp = vminf(array[33], array[41]);
1929     array[41] = vmaxf(array[33], array[41]);
1930     array[33] = tmp;
1931     tmp = vminf(array[34], array[42]);
1932     array[42] = vmaxf(array[34], array[42]);
1933     array[34] = tmp;
1934     tmp = vminf(array[35], array[43]);
1935     array[43] = vmaxf(array[35], array[43]);
1936     array[35] = tmp;
1937     tmp = vminf(array[36], array[44]);
1938     array[44] = vmaxf(array[36], array[44]);
1939     array[36] = tmp;
1940     tmp = vminf(array[37], array[45]);
1941     array[45] = vmaxf(array[37], array[45]);
1942     array[37] = tmp;
1943     tmp = vminf(array[38], array[46]);
1944     array[46] = vmaxf(array[38], array[46]);
1945     array[38] = tmp;
1946     tmp = vminf(array[39], array[47]);
1947     array[47] = vmaxf(array[39], array[47]);
1948     array[39] = tmp;
1949     tmp = vminf(array[8], array[32]);
1950     array[32] = vmaxf(array[8], array[32]);
1951     array[8] = tmp;
1952     tmp = vminf(array[9], array[33]);
1953     array[33] = vmaxf(array[9], array[33]);
1954     array[9] = tmp;
1955     tmp = vminf(array[10], array[34]);
1956     array[34] = vmaxf(array[10], array[34]);
1957     array[10] = tmp;
1958     tmp = vminf(array[11], array[35]);
1959     array[35] = vmaxf(array[11], array[35]);
1960     array[11] = tmp;
1961     tmp = vminf(array[12], array[36]);
1962     array[36] = vmaxf(array[12], array[36]);
1963     array[12] = tmp;
1964     tmp = vminf(array[13], array[37]);
1965     array[37] = vmaxf(array[13], array[37]);
1966     array[13] = tmp;
1967     tmp = vminf(array[14], array[38]);
1968     array[38] = vmaxf(array[14], array[38]);
1969     array[14] = tmp;
1970     tmp = vminf(array[15], array[39]);
1971     array[39] = vmaxf(array[15], array[39]);
1972     array[15] = tmp;
1973     tmp = vminf(array[24], array[48]);
1974     array[48] = vmaxf(array[24], array[48]);
1975     array[24] = tmp;
1976     tmp = vminf(array[8], array[16]);
1977     array[16] = vmaxf(array[8], array[16]);
1978     array[8] = tmp;
1979     tmp = vminf(array[9], array[17]);
1980     array[17] = vmaxf(array[9], array[17]);
1981     array[9] = tmp;
1982     tmp = vminf(array[10], array[18]);
1983     array[18] = vmaxf(array[10], array[18]);
1984     array[10] = tmp;
1985     tmp = vminf(array[11], array[19]);
1986     array[19] = vmaxf(array[11], array[19]);
1987     array[11] = tmp;
1988     tmp = vminf(array[12], array[20]);
1989     array[20] = vmaxf(array[12], array[20]);
1990     array[12] = tmp;
1991     tmp = vminf(array[13], array[21]);
1992     array[21] = vmaxf(array[13], array[21]);
1993     array[13] = tmp;
1994     tmp = vminf(array[14], array[22]);
1995     array[22] = vmaxf(array[14], array[22]);
1996     array[14] = tmp;
1997     tmp = vminf(array[15], array[23]);
1998     array[23] = vmaxf(array[15], array[23]);
1999     array[15] = tmp;
2000     tmp = vminf(array[24], array[32]);
2001     array[32] = vmaxf(array[24], array[32]);
2002     array[24] = tmp;
2003     tmp = vminf(array[25], array[33]);
2004     array[33] = vmaxf(array[25], array[33]);
2005     array[25] = tmp;
2006     tmp = vminf(array[26], array[34]);
2007     array[34] = vmaxf(array[26], array[34]);
2008     array[26] = tmp;
2009     tmp = vminf(array[27], array[35]);
2010     array[35] = vmaxf(array[27], array[35]);
2011     array[27] = tmp;
2012     tmp = vminf(array[28], array[36]);
2013     array[36] = vmaxf(array[28], array[36]);
2014     array[28] = tmp;
2015     tmp = vminf(array[29], array[37]);
2016     array[37] = vmaxf(array[29], array[37]);
2017     array[29] = tmp;
2018     tmp = vminf(array[30], array[38]);
2019     array[38] = vmaxf(array[30], array[38]);
2020     array[30] = tmp;
2021     tmp = vminf(array[31], array[39]);
2022     array[39] = vmaxf(array[31], array[39]);
2023     array[31] = tmp;
2024     tmp = vminf(array[40], array[48]);
2025     array[48] = vmaxf(array[40], array[48]);
2026     array[40] = tmp;
2027     tmp = vminf(array[0], array[4]);
2028     array[4] = vmaxf(array[0], array[4]);
2029     array[0] = tmp;
2030     tmp = vminf(array[1], array[5]);
2031     array[5] = vmaxf(array[1], array[5]);
2032     array[1] = tmp;
2033     tmp = vminf(array[2], array[6]);
2034     array[6] = vmaxf(array[2], array[6]);
2035     array[2] = tmp;
2036     tmp = vminf(array[3], array[7]);
2037     array[7] = vmaxf(array[3], array[7]);
2038     array[3] = tmp;
2039     tmp = vminf(array[8], array[12]);
2040     array[12] = vmaxf(array[8], array[12]);
2041     array[8] = tmp;
2042     tmp = vminf(array[9], array[13]);
2043     array[13] = vmaxf(array[9], array[13]);
2044     array[9] = tmp;
2045     tmp = vminf(array[10], array[14]);
2046     array[14] = vmaxf(array[10], array[14]);
2047     array[10] = tmp;
2048     tmp = vminf(array[11], array[15]);
2049     array[15] = vmaxf(array[11], array[15]);
2050     array[11] = tmp;
2051     tmp = vminf(array[16], array[20]);
2052     array[20] = vmaxf(array[16], array[20]);
2053     array[16] = tmp;
2054     tmp = vminf(array[17], array[21]);
2055     array[21] = vmaxf(array[17], array[21]);
2056     array[17] = tmp;
2057     tmp = vminf(array[18], array[22]);
2058     array[22] = vmaxf(array[18], array[22]);
2059     array[18] = tmp;
2060     tmp = vminf(array[19], array[23]);
2061     array[23] = vmaxf(array[19], array[23]);
2062     array[19] = tmp;
2063     tmp = vminf(array[24], array[28]);
2064     array[28] = vmaxf(array[24], array[28]);
2065     array[24] = tmp;
2066     tmp = vminf(array[25], array[29]);
2067     array[29] = vmaxf(array[25], array[29]);
2068     array[25] = tmp;
2069     tmp = vminf(array[26], array[30]);
2070     array[30] = vmaxf(array[26], array[30]);
2071     array[26] = tmp;
2072     tmp = vminf(array[27], array[31]);
2073     array[31] = vmaxf(array[27], array[31]);
2074     array[27] = tmp;
2075     tmp = vminf(array[32], array[36]);
2076     array[36] = vmaxf(array[32], array[36]);
2077     array[32] = tmp;
2078     tmp = vminf(array[33], array[37]);
2079     array[37] = vmaxf(array[33], array[37]);
2080     array[33] = tmp;
2081     tmp = vminf(array[34], array[38]);
2082     array[38] = vmaxf(array[34], array[38]);
2083     array[34] = tmp;
2084     tmp = vminf(array[35], array[39]);
2085     array[39] = vmaxf(array[35], array[39]);
2086     array[35] = tmp;
2087     tmp = vminf(array[40], array[44]);
2088     array[44] = vmaxf(array[40], array[44]);
2089     array[40] = tmp;
2090     tmp = vminf(array[41], array[45]);
2091     array[45] = vmaxf(array[41], array[45]);
2092     array[41] = tmp;
2093     tmp = vminf(array[42], array[46]);
2094     array[46] = vmaxf(array[42], array[46]);
2095     array[42] = tmp;
2096     tmp = vminf(array[43], array[47]);
2097     array[47] = vmaxf(array[43], array[47]);
2098     array[43] = tmp;
2099     tmp = vminf(array[4], array[32]);
2100     array[32] = vmaxf(array[4], array[32]);
2101     array[4] = tmp;
2102     tmp = vminf(array[5], array[33]);
2103     array[33] = vmaxf(array[5], array[33]);
2104     array[5] = tmp;
2105     tmp = vminf(array[6], array[34]);
2106     array[34] = vmaxf(array[6], array[34]);
2107     array[6] = tmp;
2108     tmp = vminf(array[7], array[35]);
2109     array[35] = vmaxf(array[7], array[35]);
2110     array[7] = tmp;
2111     tmp = vminf(array[12], array[40]);
2112     array[40] = vmaxf(array[12], array[40]);
2113     array[12] = tmp;
2114     tmp = vminf(array[13], array[41]);
2115     array[41] = vmaxf(array[13], array[41]);
2116     array[13] = tmp;
2117     tmp = vminf(array[14], array[42]);
2118     array[42] = vmaxf(array[14], array[42]);
2119     array[14] = tmp;
2120     tmp = vminf(array[15], array[43]);
2121     array[43] = vmaxf(array[15], array[43]);
2122     array[15] = tmp;
2123     tmp = vminf(array[20], array[48]);
2124     array[48] = vmaxf(array[20], array[48]);
2125     array[20] = tmp;
2126     tmp = vminf(array[4], array[16]);
2127     array[16] = vmaxf(array[4], array[16]);
2128     array[4] = tmp;
2129     tmp = vminf(array[5], array[17]);
2130     array[17] = vmaxf(array[5], array[17]);
2131     array[5] = tmp;
2132     tmp = vminf(array[6], array[18]);
2133     array[18] = vmaxf(array[6], array[18]);
2134     array[6] = tmp;
2135     tmp = vminf(array[7], array[19]);
2136     array[19] = vmaxf(array[7], array[19]);
2137     array[7] = tmp;
2138     tmp = vminf(array[12], array[24]);
2139     array[24] = vmaxf(array[12], array[24]);
2140     array[12] = tmp;
2141     tmp = vminf(array[13], array[25]);
2142     array[25] = vmaxf(array[13], array[25]);
2143     array[13] = tmp;
2144     tmp = vminf(array[14], array[26]);
2145     array[26] = vmaxf(array[14], array[26]);
2146     array[14] = tmp;
2147     tmp = vminf(array[15], array[27]);
2148     array[27] = vmaxf(array[15], array[27]);
2149     array[15] = tmp;
2150     tmp = vminf(array[20], array[32]);
2151     array[32] = vmaxf(array[20], array[32]);
2152     array[20] = tmp;
2153     tmp = vminf(array[21], array[33]);
2154     array[33] = vmaxf(array[21], array[33]);
2155     array[21] = tmp;
2156     tmp = vminf(array[22], array[34]);
2157     array[34] = vmaxf(array[22], array[34]);
2158     array[22] = tmp;
2159     tmp = vminf(array[23], array[35]);
2160     array[35] = vmaxf(array[23], array[35]);
2161     array[23] = tmp;
2162     tmp = vminf(array[28], array[40]);
2163     array[40] = vmaxf(array[28], array[40]);
2164     array[28] = tmp;
2165     tmp = vminf(array[29], array[41]);
2166     array[41] = vmaxf(array[29], array[41]);
2167     array[29] = tmp;
2168     tmp = vminf(array[30], array[42]);
2169     array[42] = vmaxf(array[30], array[42]);
2170     array[30] = tmp;
2171     tmp = vminf(array[31], array[43]);
2172     array[43] = vmaxf(array[31], array[43]);
2173     array[31] = tmp;
2174     tmp = vminf(array[36], array[48]);
2175     array[48] = vmaxf(array[36], array[48]);
2176     array[36] = tmp;
2177     tmp = vminf(array[4], array[8]);
2178     array[8] = vmaxf(array[4], array[8]);
2179     array[4] = tmp;
2180     tmp = vminf(array[5], array[9]);
2181     array[9] = vmaxf(array[5], array[9]);
2182     array[5] = tmp;
2183     tmp = vminf(array[6], array[10]);
2184     array[10] = vmaxf(array[6], array[10]);
2185     array[6] = tmp;
2186     tmp = vminf(array[7], array[11]);
2187     array[11] = vmaxf(array[7], array[11]);
2188     array[7] = tmp;
2189     tmp = vminf(array[12], array[16]);
2190     array[16] = vmaxf(array[12], array[16]);
2191     array[12] = tmp;
2192     tmp = vminf(array[13], array[17]);
2193     array[17] = vmaxf(array[13], array[17]);
2194     array[13] = tmp;
2195     tmp = vminf(array[14], array[18]);
2196     array[18] = vmaxf(array[14], array[18]);
2197     array[14] = tmp;
2198     tmp = vminf(array[15], array[19]);
2199     array[19] = vmaxf(array[15], array[19]);
2200     array[15] = tmp;
2201     tmp = vminf(array[20], array[24]);
2202     array[24] = vmaxf(array[20], array[24]);
2203     array[20] = tmp;
2204     tmp = vminf(array[21], array[25]);
2205     array[25] = vmaxf(array[21], array[25]);
2206     array[21] = tmp;
2207     tmp = vminf(array[22], array[26]);
2208     array[26] = vmaxf(array[22], array[26]);
2209     array[22] = tmp;
2210     tmp = vminf(array[23], array[27]);
2211     array[27] = vmaxf(array[23], array[27]);
2212     array[23] = tmp;
2213     tmp = vminf(array[28], array[32]);
2214     array[32] = vmaxf(array[28], array[32]);
2215     array[28] = tmp;
2216     tmp = vminf(array[29], array[33]);
2217     array[33] = vmaxf(array[29], array[33]);
2218     array[29] = tmp;
2219     tmp = vminf(array[30], array[34]);
2220     array[34] = vmaxf(array[30], array[34]);
2221     array[30] = tmp;
2222     tmp = vminf(array[31], array[35]);
2223     array[35] = vmaxf(array[31], array[35]);
2224     array[31] = tmp;
2225     tmp = vminf(array[36], array[40]);
2226     array[40] = vmaxf(array[36], array[40]);
2227     array[36] = tmp;
2228     tmp = vminf(array[37], array[41]);
2229     array[41] = vmaxf(array[37], array[41]);
2230     array[37] = tmp;
2231     tmp = vminf(array[38], array[42]);
2232     array[42] = vmaxf(array[38], array[42]);
2233     array[38] = tmp;
2234     tmp = vminf(array[39], array[43]);
2235     array[43] = vmaxf(array[39], array[43]);
2236     array[39] = tmp;
2237     tmp = vminf(array[44], array[48]);
2238     array[48] = vmaxf(array[44], array[48]);
2239     array[44] = tmp;
2240     tmp = vminf(array[0], array[2]);
2241     array[2] = vmaxf(array[0], array[2]);
2242     array[0] = tmp;
2243     tmp = vminf(array[1], array[3]);
2244     array[3] = vmaxf(array[1], array[3]);
2245     array[1] = tmp;
2246     tmp = vminf(array[4], array[6]);
2247     array[6] = vmaxf(array[4], array[6]);
2248     array[4] = tmp;
2249     tmp = vminf(array[5], array[7]);
2250     array[7] = vmaxf(array[5], array[7]);
2251     array[5] = tmp;
2252     tmp = vminf(array[8], array[10]);
2253     array[10] = vmaxf(array[8], array[10]);
2254     array[8] = tmp;
2255     tmp = vminf(array[9], array[11]);
2256     array[11] = vmaxf(array[9], array[11]);
2257     array[9] = tmp;
2258     tmp = vminf(array[12], array[14]);
2259     array[14] = vmaxf(array[12], array[14]);
2260     array[12] = tmp;
2261     tmp = vminf(array[13], array[15]);
2262     array[15] = vmaxf(array[13], array[15]);
2263     array[13] = tmp;
2264     tmp = vminf(array[16], array[18]);
2265     array[18] = vmaxf(array[16], array[18]);
2266     array[16] = tmp;
2267     tmp = vminf(array[17], array[19]);
2268     array[19] = vmaxf(array[17], array[19]);
2269     array[17] = tmp;
2270     tmp = vminf(array[20], array[22]);
2271     array[22] = vmaxf(array[20], array[22]);
2272     array[20] = tmp;
2273     tmp = vminf(array[21], array[23]);
2274     array[23] = vmaxf(array[21], array[23]);
2275     array[21] = tmp;
2276     tmp = vminf(array[24], array[26]);
2277     array[26] = vmaxf(array[24], array[26]);
2278     array[24] = tmp;
2279     tmp = vminf(array[25], array[27]);
2280     array[27] = vmaxf(array[25], array[27]);
2281     array[25] = tmp;
2282     tmp = vminf(array[28], array[30]);
2283     array[30] = vmaxf(array[28], array[30]);
2284     array[28] = tmp;
2285     tmp = vminf(array[29], array[31]);
2286     array[31] = vmaxf(array[29], array[31]);
2287     array[29] = tmp;
2288     tmp = vminf(array[32], array[34]);
2289     array[34] = vmaxf(array[32], array[34]);
2290     array[32] = tmp;
2291     tmp = vminf(array[33], array[35]);
2292     array[35] = vmaxf(array[33], array[35]);
2293     array[33] = tmp;
2294     tmp = vminf(array[36], array[38]);
2295     array[38] = vmaxf(array[36], array[38]);
2296     array[36] = tmp;
2297     tmp = vminf(array[37], array[39]);
2298     array[39] = vmaxf(array[37], array[39]);
2299     array[37] = tmp;
2300     tmp = vminf(array[40], array[42]);
2301     array[42] = vmaxf(array[40], array[42]);
2302     array[40] = tmp;
2303     tmp = vminf(array[41], array[43]);
2304     array[43] = vmaxf(array[41], array[43]);
2305     array[41] = tmp;
2306     tmp = vminf(array[44], array[46]);
2307     array[46] = vmaxf(array[44], array[46]);
2308     array[44] = tmp;
2309     tmp = vminf(array[45], array[47]);
2310     array[47] = vmaxf(array[45], array[47]);
2311     array[45] = tmp;
2312     tmp = vminf(array[2], array[32]);
2313     array[32] = vmaxf(array[2], array[32]);
2314     array[2] = tmp;
2315     tmp = vminf(array[3], array[33]);
2316     array[33] = vmaxf(array[3], array[33]);
2317     array[3] = tmp;
2318     tmp = vminf(array[6], array[36]);
2319     array[36] = vmaxf(array[6], array[36]);
2320     array[6] = tmp;
2321     tmp = vminf(array[7], array[37]);
2322     array[37] = vmaxf(array[7], array[37]);
2323     array[7] = tmp;
2324     tmp = vminf(array[10], array[40]);
2325     array[40] = vmaxf(array[10], array[40]);
2326     array[10] = tmp;
2327     tmp = vminf(array[11], array[41]);
2328     array[41] = vmaxf(array[11], array[41]);
2329     array[11] = tmp;
2330     tmp = vminf(array[14], array[44]);
2331     array[44] = vmaxf(array[14], array[44]);
2332     array[14] = tmp;
2333     tmp = vminf(array[15], array[45]);
2334     array[45] = vmaxf(array[15], array[45]);
2335     array[15] = tmp;
2336     tmp = vminf(array[18], array[48]);
2337     array[48] = vmaxf(array[18], array[48]);
2338     array[18] = tmp;
2339     tmp = vminf(array[2], array[16]);
2340     array[16] = vmaxf(array[2], array[16]);
2341     array[2] = tmp;
2342     tmp = vminf(array[3], array[17]);
2343     array[17] = vmaxf(array[3], array[17]);
2344     array[3] = tmp;
2345     tmp = vminf(array[6], array[20]);
2346     array[20] = vmaxf(array[6], array[20]);
2347     array[6] = tmp;
2348     tmp = vminf(array[7], array[21]);
2349     array[21] = vmaxf(array[7], array[21]);
2350     array[7] = tmp;
2351     tmp = vminf(array[10], array[24]);
2352     array[24] = vmaxf(array[10], array[24]);
2353     array[10] = tmp;
2354     tmp = vminf(array[11], array[25]);
2355     array[25] = vmaxf(array[11], array[25]);
2356     array[11] = tmp;
2357     tmp = vminf(array[14], array[28]);
2358     array[28] = vmaxf(array[14], array[28]);
2359     array[14] = tmp;
2360     tmp = vminf(array[15], array[29]);
2361     array[29] = vmaxf(array[15], array[29]);
2362     array[15] = tmp;
2363     tmp = vminf(array[18], array[32]);
2364     array[32] = vmaxf(array[18], array[32]);
2365     array[18] = tmp;
2366     tmp = vminf(array[19], array[33]);
2367     array[33] = vmaxf(array[19], array[33]);
2368     array[19] = tmp;
2369     tmp = vminf(array[22], array[36]);
2370     array[36] = vmaxf(array[22], array[36]);
2371     array[22] = tmp;
2372     tmp = vminf(array[23], array[37]);
2373     array[37] = vmaxf(array[23], array[37]);
2374     array[23] = tmp;
2375     tmp = vminf(array[26], array[40]);
2376     array[40] = vmaxf(array[26], array[40]);
2377     array[26] = tmp;
2378     tmp = vminf(array[27], array[41]);
2379     array[41] = vmaxf(array[27], array[41]);
2380     array[27] = tmp;
2381     tmp = vminf(array[30], array[44]);
2382     array[44] = vmaxf(array[30], array[44]);
2383     array[30] = tmp;
2384     tmp = vminf(array[31], array[45]);
2385     array[45] = vmaxf(array[31], array[45]);
2386     array[31] = tmp;
2387     tmp = vminf(array[34], array[48]);
2388     array[48] = vmaxf(array[34], array[48]);
2389     array[34] = tmp;
2390     tmp = vminf(array[2], array[8]);
2391     array[8] = vmaxf(array[2], array[8]);
2392     array[2] = tmp;
2393     tmp = vminf(array[3], array[9]);
2394     array[9] = vmaxf(array[3], array[9]);
2395     array[3] = tmp;
2396     tmp = vminf(array[6], array[12]);
2397     array[12] = vmaxf(array[6], array[12]);
2398     array[6] = tmp;
2399     tmp = vminf(array[7], array[13]);
2400     array[13] = vmaxf(array[7], array[13]);
2401     array[7] = tmp;
2402     tmp = vminf(array[10], array[16]);
2403     array[16] = vmaxf(array[10], array[16]);
2404     array[10] = tmp;
2405     tmp = vminf(array[11], array[17]);
2406     array[17] = vmaxf(array[11], array[17]);
2407     array[11] = tmp;
2408     tmp = vminf(array[14], array[20]);
2409     array[20] = vmaxf(array[14], array[20]);
2410     array[14] = tmp;
2411     tmp = vminf(array[15], array[21]);
2412     array[21] = vmaxf(array[15], array[21]);
2413     array[15] = tmp;
2414     tmp = vminf(array[18], array[24]);
2415     array[24] = vmaxf(array[18], array[24]);
2416     array[18] = tmp;
2417     tmp = vminf(array[19], array[25]);
2418     array[25] = vmaxf(array[19], array[25]);
2419     array[19] = tmp;
2420     tmp = vminf(array[22], array[28]);
2421     array[28] = vmaxf(array[22], array[28]);
2422     array[22] = tmp;
2423     tmp = vminf(array[23], array[29]);
2424     array[29] = vmaxf(array[23], array[29]);
2425     array[23] = tmp;
2426     tmp = vminf(array[26], array[32]);
2427     array[32] = vmaxf(array[26], array[32]);
2428     array[26] = tmp;
2429     tmp = vminf(array[27], array[33]);
2430     array[33] = vmaxf(array[27], array[33]);
2431     array[27] = tmp;
2432     tmp = vminf(array[30], array[36]);
2433     array[36] = vmaxf(array[30], array[36]);
2434     array[30] = tmp;
2435     tmp = vminf(array[31], array[37]);
2436     array[37] = vmaxf(array[31], array[37]);
2437     array[31] = tmp;
2438     tmp = vminf(array[34], array[40]);
2439     array[40] = vmaxf(array[34], array[40]);
2440     array[34] = tmp;
2441     tmp = vminf(array[35], array[41]);
2442     array[41] = vmaxf(array[35], array[41]);
2443     array[35] = tmp;
2444     tmp = vminf(array[38], array[44]);
2445     array[44] = vmaxf(array[38], array[44]);
2446     array[38] = tmp;
2447     tmp = vminf(array[39], array[45]);
2448     array[45] = vmaxf(array[39], array[45]);
2449     array[39] = tmp;
2450     tmp = vminf(array[42], array[48]);
2451     array[48] = vmaxf(array[42], array[48]);
2452     array[42] = tmp;
2453     tmp = vminf(array[2], array[4]);
2454     array[4] = vmaxf(array[2], array[4]);
2455     array[2] = tmp;
2456     tmp = vminf(array[3], array[5]);
2457     array[5] = vmaxf(array[3], array[5]);
2458     array[3] = tmp;
2459     tmp = vminf(array[6], array[8]);
2460     array[8] = vmaxf(array[6], array[8]);
2461     array[6] = tmp;
2462     tmp = vminf(array[7], array[9]);
2463     array[9] = vmaxf(array[7], array[9]);
2464     array[7] = tmp;
2465     tmp = vminf(array[10], array[12]);
2466     array[12] = vmaxf(array[10], array[12]);
2467     array[10] = tmp;
2468     tmp = vminf(array[11], array[13]);
2469     array[13] = vmaxf(array[11], array[13]);
2470     array[11] = tmp;
2471     tmp = vminf(array[14], array[16]);
2472     array[16] = vmaxf(array[14], array[16]);
2473     array[14] = tmp;
2474     tmp = vminf(array[15], array[17]);
2475     array[17] = vmaxf(array[15], array[17]);
2476     array[15] = tmp;
2477     tmp = vminf(array[18], array[20]);
2478     array[20] = vmaxf(array[18], array[20]);
2479     array[18] = tmp;
2480     tmp = vminf(array[19], array[21]);
2481     array[21] = vmaxf(array[19], array[21]);
2482     array[19] = tmp;
2483     tmp = vminf(array[22], array[24]);
2484     array[24] = vmaxf(array[22], array[24]);
2485     array[22] = tmp;
2486     tmp = vminf(array[23], array[25]);
2487     array[25] = vmaxf(array[23], array[25]);
2488     array[23] = tmp;
2489     tmp = vminf(array[26], array[28]);
2490     array[28] = vmaxf(array[26], array[28]);
2491     array[26] = tmp;
2492     tmp = vminf(array[27], array[29]);
2493     array[29] = vmaxf(array[27], array[29]);
2494     array[27] = tmp;
2495     tmp = vminf(array[30], array[32]);
2496     array[32] = vmaxf(array[30], array[32]);
2497     array[30] = tmp;
2498     tmp = vminf(array[31], array[33]);
2499     array[33] = vmaxf(array[31], array[33]);
2500     array[31] = tmp;
2501     tmp = vminf(array[34], array[36]);
2502     array[36] = vmaxf(array[34], array[36]);
2503     array[34] = tmp;
2504     tmp = vminf(array[35], array[37]);
2505     array[37] = vmaxf(array[35], array[37]);
2506     array[35] = tmp;
2507     tmp = vminf(array[38], array[40]);
2508     array[40] = vmaxf(array[38], array[40]);
2509     array[38] = tmp;
2510     tmp = vminf(array[39], array[41]);
2511     array[41] = vmaxf(array[39], array[41]);
2512     array[39] = tmp;
2513     tmp = vminf(array[42], array[44]);
2514     array[44] = vmaxf(array[42], array[44]);
2515     array[42] = tmp;
2516     tmp = vminf(array[43], array[45]);
2517     array[45] = vmaxf(array[43], array[45]);
2518     array[43] = tmp;
2519     tmp = vminf(array[46], array[48]);
2520     array[48] = vmaxf(array[46], array[48]);
2521     array[46] = tmp;
2522     array[1] = vmaxf(array[0], array[1]);
2523     array[3] = vmaxf(array[2], array[3]);
2524     array[5] = vmaxf(array[4], array[5]);
2525     array[7] = vmaxf(array[6], array[7]);
2526     array[9] = vmaxf(array[8], array[9]);
2527     array[11] = vmaxf(array[10], array[11]);
2528     array[13] = vmaxf(array[12], array[13]);
2529     array[15] = vmaxf(array[14], array[15]);
2530     array[17] = vmaxf(array[16], array[17]);
2531     array[19] = vmaxf(array[18], array[19]);
2532     array[21] = vmaxf(array[20], array[21]);
2533     array[23] = vmaxf(array[22], array[23]);
2534     array[24] = vminf(array[24], array[25]);
2535     array[26] = vminf(array[26], array[27]);
2536     array[28] = vminf(array[28], array[29]);
2537     array[30] = vminf(array[30], array[31]);
2538     array[32] = vminf(array[32], array[33]);
2539     array[34] = vminf(array[34], array[35]);
2540     array[36] = vminf(array[36], array[37]);
2541     array[38] = vminf(array[38], array[39]);
2542     array[40] = vminf(array[40], array[41]);
2543     array[42] = vminf(array[42], array[43]);
2544     array[44] = vminf(array[44], array[45]);
2545     array[46] = vminf(array[46], array[47]);
2546     array[32] = vmaxf(array[1], array[32]);
2547     array[34] = vmaxf(array[3], array[34]);
2548     array[36] = vmaxf(array[5], array[36]);
2549     array[38] = vmaxf(array[7], array[38]);
2550     array[9] = vminf(array[9], array[40]);
2551     array[11] = vminf(array[11], array[42]);
2552     array[13] = vminf(array[13], array[44]);
2553     array[15] = vminf(array[15], array[46]);
2554     array[17] = vminf(array[17], array[48]);
2555     array[24] = vmaxf(array[9], array[24]);
2556     array[26] = vmaxf(array[11], array[26]);
2557     array[28] = vmaxf(array[13], array[28]);
2558     array[30] = vmaxf(array[15], array[30]);
2559     array[17] = vminf(array[17], array[32]);
2560     array[19] = vminf(array[19], array[34]);
2561     array[21] = vminf(array[21], array[36]);
2562     array[23] = vminf(array[23], array[38]);
2563     array[24] = vmaxf(array[17], array[24]);
2564     array[26] = vmaxf(array[19], array[26]);
2565     array[21] = vminf(array[21], array[28]);
2566     array[23] = vminf(array[23], array[30]);
2567     array[24] = vmaxf(array[21], array[24]);
2568     array[23] = vminf(array[23], array[26]);
2569     return vmaxf(array[23], array[24]);
2570 }
2571 #endif
2572 
2573 template<typename T>
median(std::array<T,81> array)2574 inline T median(std::array<T, 81> array)
2575 {
2576     T tmp = std::min(array[0], array[64]);
2577     array[64] = std::max(array[0], array[64]);
2578     array[0] = tmp;
2579     tmp = std::min(array[1], array[65]);
2580     array[65] = std::max(array[1], array[65]);
2581     array[1] = tmp;
2582     tmp = std::min(array[2], array[66]);
2583     array[66] = std::max(array[2], array[66]);
2584     array[2] = tmp;
2585     tmp = std::min(array[3], array[67]);
2586     array[67] = std::max(array[3], array[67]);
2587     array[3] = tmp;
2588     tmp = std::min(array[4], array[68]);
2589     array[68] = std::max(array[4], array[68]);
2590     array[4] = tmp;
2591     tmp = std::min(array[5], array[69]);
2592     array[69] = std::max(array[5], array[69]);
2593     array[5] = tmp;
2594     tmp = std::min(array[6], array[70]);
2595     array[70] = std::max(array[6], array[70]);
2596     array[6] = tmp;
2597     tmp = std::min(array[7], array[71]);
2598     array[71] = std::max(array[7], array[71]);
2599     array[7] = tmp;
2600     tmp = std::min(array[8], array[72]);
2601     array[72] = std::max(array[8], array[72]);
2602     array[8] = tmp;
2603     tmp = std::min(array[9], array[73]);
2604     array[73] = std::max(array[9], array[73]);
2605     array[9] = tmp;
2606     tmp = std::min(array[10], array[74]);
2607     array[74] = std::max(array[10], array[74]);
2608     array[10] = tmp;
2609     tmp = std::min(array[11], array[75]);
2610     array[75] = std::max(array[11], array[75]);
2611     array[11] = tmp;
2612     tmp = std::min(array[12], array[76]);
2613     array[76] = std::max(array[12], array[76]);
2614     array[12] = tmp;
2615     tmp = std::min(array[13], array[77]);
2616     array[77] = std::max(array[13], array[77]);
2617     array[13] = tmp;
2618     tmp = std::min(array[14], array[78]);
2619     array[78] = std::max(array[14], array[78]);
2620     array[14] = tmp;
2621     tmp = std::min(array[15], array[79]);
2622     array[79] = std::max(array[15], array[79]);
2623     array[15] = tmp;
2624     tmp = std::min(array[16], array[80]);
2625     array[80] = std::max(array[16], array[80]);
2626     array[16] = tmp;
2627     tmp = std::min(array[0], array[32]);
2628     array[32] = std::max(array[0], array[32]);
2629     array[0] = tmp;
2630     tmp = std::min(array[1], array[33]);
2631     array[33] = std::max(array[1], array[33]);
2632     array[1] = tmp;
2633     tmp = std::min(array[2], array[34]);
2634     array[34] = std::max(array[2], array[34]);
2635     array[2] = tmp;
2636     tmp = std::min(array[3], array[35]);
2637     array[35] = std::max(array[3], array[35]);
2638     array[3] = tmp;
2639     tmp = std::min(array[4], array[36]);
2640     array[36] = std::max(array[4], array[36]);
2641     array[4] = tmp;
2642     tmp = std::min(array[5], array[37]);
2643     array[37] = std::max(array[5], array[37]);
2644     array[5] = tmp;
2645     tmp = std::min(array[6], array[38]);
2646     array[38] = std::max(array[6], array[38]);
2647     array[6] = tmp;
2648     tmp = std::min(array[7], array[39]);
2649     array[39] = std::max(array[7], array[39]);
2650     array[7] = tmp;
2651     tmp = std::min(array[8], array[40]);
2652     array[40] = std::max(array[8], array[40]);
2653     array[8] = tmp;
2654     tmp = std::min(array[9], array[41]);
2655     array[41] = std::max(array[9], array[41]);
2656     array[9] = tmp;
2657     tmp = std::min(array[10], array[42]);
2658     array[42] = std::max(array[10], array[42]);
2659     array[10] = tmp;
2660     tmp = std::min(array[11], array[43]);
2661     array[43] = std::max(array[11], array[43]);
2662     array[11] = tmp;
2663     tmp = std::min(array[12], array[44]);
2664     array[44] = std::max(array[12], array[44]);
2665     array[12] = tmp;
2666     tmp = std::min(array[13], array[45]);
2667     array[45] = std::max(array[13], array[45]);
2668     array[13] = tmp;
2669     tmp = std::min(array[14], array[46]);
2670     array[46] = std::max(array[14], array[46]);
2671     array[14] = tmp;
2672     tmp = std::min(array[15], array[47]);
2673     array[47] = std::max(array[15], array[47]);
2674     array[15] = tmp;
2675     tmp = std::min(array[16], array[48]);
2676     array[48] = std::max(array[16], array[48]);
2677     array[16] = tmp;
2678     tmp = std::min(array[17], array[49]);
2679     array[49] = std::max(array[17], array[49]);
2680     array[17] = tmp;
2681     tmp = std::min(array[18], array[50]);
2682     array[50] = std::max(array[18], array[50]);
2683     array[18] = tmp;
2684     tmp = std::min(array[19], array[51]);
2685     array[51] = std::max(array[19], array[51]);
2686     array[19] = tmp;
2687     tmp = std::min(array[20], array[52]);
2688     array[52] = std::max(array[20], array[52]);
2689     array[20] = tmp;
2690     tmp = std::min(array[21], array[53]);
2691     array[53] = std::max(array[21], array[53]);
2692     array[21] = tmp;
2693     tmp = std::min(array[22], array[54]);
2694     array[54] = std::max(array[22], array[54]);
2695     array[22] = tmp;
2696     tmp = std::min(array[23], array[55]);
2697     array[55] = std::max(array[23], array[55]);
2698     array[23] = tmp;
2699     tmp = std::min(array[24], array[56]);
2700     array[56] = std::max(array[24], array[56]);
2701     array[24] = tmp;
2702     tmp = std::min(array[25], array[57]);
2703     array[57] = std::max(array[25], array[57]);
2704     array[25] = tmp;
2705     tmp = std::min(array[26], array[58]);
2706     array[58] = std::max(array[26], array[58]);
2707     array[26] = tmp;
2708     tmp = std::min(array[27], array[59]);
2709     array[59] = std::max(array[27], array[59]);
2710     array[27] = tmp;
2711     tmp = std::min(array[28], array[60]);
2712     array[60] = std::max(array[28], array[60]);
2713     array[28] = tmp;
2714     tmp = std::min(array[29], array[61]);
2715     array[61] = std::max(array[29], array[61]);
2716     array[29] = tmp;
2717     tmp = std::min(array[30], array[62]);
2718     array[62] = std::max(array[30], array[62]);
2719     array[30] = tmp;
2720     tmp = std::min(array[31], array[63]);
2721     array[63] = std::max(array[31], array[63]);
2722     array[31] = tmp;
2723     tmp = std::min(array[32], array[64]);
2724     array[64] = std::max(array[32], array[64]);
2725     array[32] = tmp;
2726     tmp = std::min(array[33], array[65]);
2727     array[65] = std::max(array[33], array[65]);
2728     array[33] = tmp;
2729     tmp = std::min(array[34], array[66]);
2730     array[66] = std::max(array[34], array[66]);
2731     array[34] = tmp;
2732     tmp = std::min(array[35], array[67]);
2733     array[67] = std::max(array[35], array[67]);
2734     array[35] = tmp;
2735     tmp = std::min(array[36], array[68]);
2736     array[68] = std::max(array[36], array[68]);
2737     array[36] = tmp;
2738     tmp = std::min(array[37], array[69]);
2739     array[69] = std::max(array[37], array[69]);
2740     array[37] = tmp;
2741     tmp = std::min(array[38], array[70]);
2742     array[70] = std::max(array[38], array[70]);
2743     array[38] = tmp;
2744     tmp = std::min(array[39], array[71]);
2745     array[71] = std::max(array[39], array[71]);
2746     array[39] = tmp;
2747     tmp = std::min(array[40], array[72]);
2748     array[72] = std::max(array[40], array[72]);
2749     array[40] = tmp;
2750     tmp = std::min(array[41], array[73]);
2751     array[73] = std::max(array[41], array[73]);
2752     array[41] = tmp;
2753     tmp = std::min(array[42], array[74]);
2754     array[74] = std::max(array[42], array[74]);
2755     array[42] = tmp;
2756     tmp = std::min(array[43], array[75]);
2757     array[75] = std::max(array[43], array[75]);
2758     array[43] = tmp;
2759     tmp = std::min(array[44], array[76]);
2760     array[76] = std::max(array[44], array[76]);
2761     array[44] = tmp;
2762     tmp = std::min(array[45], array[77]);
2763     array[77] = std::max(array[45], array[77]);
2764     array[45] = tmp;
2765     tmp = std::min(array[46], array[78]);
2766     array[78] = std::max(array[46], array[78]);
2767     array[46] = tmp;
2768     tmp = std::min(array[47], array[79]);
2769     array[79] = std::max(array[47], array[79]);
2770     array[47] = tmp;
2771     tmp = std::min(array[48], array[80]);
2772     array[80] = std::max(array[48], array[80]);
2773     array[48] = tmp;
2774     tmp = std::min(array[0], array[16]);
2775     array[16] = std::max(array[0], array[16]);
2776     array[0] = tmp;
2777     tmp = std::min(array[1], array[17]);
2778     array[17] = std::max(array[1], array[17]);
2779     array[1] = tmp;
2780     tmp = std::min(array[2], array[18]);
2781     array[18] = std::max(array[2], array[18]);
2782     array[2] = tmp;
2783     tmp = std::min(array[3], array[19]);
2784     array[19] = std::max(array[3], array[19]);
2785     array[3] = tmp;
2786     tmp = std::min(array[4], array[20]);
2787     array[20] = std::max(array[4], array[20]);
2788     array[4] = tmp;
2789     tmp = std::min(array[5], array[21]);
2790     array[21] = std::max(array[5], array[21]);
2791     array[5] = tmp;
2792     tmp = std::min(array[6], array[22]);
2793     array[22] = std::max(array[6], array[22]);
2794     array[6] = tmp;
2795     tmp = std::min(array[7], array[23]);
2796     array[23] = std::max(array[7], array[23]);
2797     array[7] = tmp;
2798     tmp = std::min(array[8], array[24]);
2799     array[24] = std::max(array[8], array[24]);
2800     array[8] = tmp;
2801     tmp = std::min(array[9], array[25]);
2802     array[25] = std::max(array[9], array[25]);
2803     array[9] = tmp;
2804     tmp = std::min(array[10], array[26]);
2805     array[26] = std::max(array[10], array[26]);
2806     array[10] = tmp;
2807     tmp = std::min(array[11], array[27]);
2808     array[27] = std::max(array[11], array[27]);
2809     array[11] = tmp;
2810     tmp = std::min(array[12], array[28]);
2811     array[28] = std::max(array[12], array[28]);
2812     array[12] = tmp;
2813     tmp = std::min(array[13], array[29]);
2814     array[29] = std::max(array[13], array[29]);
2815     array[13] = tmp;
2816     tmp = std::min(array[14], array[30]);
2817     array[30] = std::max(array[14], array[30]);
2818     array[14] = tmp;
2819     tmp = std::min(array[15], array[31]);
2820     array[31] = std::max(array[15], array[31]);
2821     array[15] = tmp;
2822     tmp = std::min(array[32], array[48]);
2823     array[48] = std::max(array[32], array[48]);
2824     array[32] = tmp;
2825     tmp = std::min(array[33], array[49]);
2826     array[49] = std::max(array[33], array[49]);
2827     array[33] = tmp;
2828     tmp = std::min(array[34], array[50]);
2829     array[50] = std::max(array[34], array[50]);
2830     array[34] = tmp;
2831     tmp = std::min(array[35], array[51]);
2832     array[51] = std::max(array[35], array[51]);
2833     array[35] = tmp;
2834     tmp = std::min(array[36], array[52]);
2835     array[52] = std::max(array[36], array[52]);
2836     array[36] = tmp;
2837     tmp = std::min(array[37], array[53]);
2838     array[53] = std::max(array[37], array[53]);
2839     array[37] = tmp;
2840     tmp = std::min(array[38], array[54]);
2841     array[54] = std::max(array[38], array[54]);
2842     array[38] = tmp;
2843     tmp = std::min(array[39], array[55]);
2844     array[55] = std::max(array[39], array[55]);
2845     array[39] = tmp;
2846     tmp = std::min(array[40], array[56]);
2847     array[56] = std::max(array[40], array[56]);
2848     array[40] = tmp;
2849     tmp = std::min(array[41], array[57]);
2850     array[57] = std::max(array[41], array[57]);
2851     array[41] = tmp;
2852     tmp = std::min(array[42], array[58]);
2853     array[58] = std::max(array[42], array[58]);
2854     array[42] = tmp;
2855     tmp = std::min(array[43], array[59]);
2856     array[59] = std::max(array[43], array[59]);
2857     array[43] = tmp;
2858     tmp = std::min(array[44], array[60]);
2859     array[60] = std::max(array[44], array[60]);
2860     array[44] = tmp;
2861     tmp = std::min(array[45], array[61]);
2862     array[61] = std::max(array[45], array[61]);
2863     array[45] = tmp;
2864     tmp = std::min(array[46], array[62]);
2865     array[62] = std::max(array[46], array[62]);
2866     array[46] = tmp;
2867     tmp = std::min(array[47], array[63]);
2868     array[63] = std::max(array[47], array[63]);
2869     array[47] = tmp;
2870     tmp = std::min(array[64], array[80]);
2871     array[80] = std::max(array[64], array[80]);
2872     array[64] = tmp;
2873     tmp = std::min(array[16], array[64]);
2874     array[64] = std::max(array[16], array[64]);
2875     array[16] = tmp;
2876     tmp = std::min(array[17], array[65]);
2877     array[65] = std::max(array[17], array[65]);
2878     array[17] = tmp;
2879     tmp = std::min(array[18], array[66]);
2880     array[66] = std::max(array[18], array[66]);
2881     array[18] = tmp;
2882     tmp = std::min(array[19], array[67]);
2883     array[67] = std::max(array[19], array[67]);
2884     array[19] = tmp;
2885     tmp = std::min(array[20], array[68]);
2886     array[68] = std::max(array[20], array[68]);
2887     array[20] = tmp;
2888     tmp = std::min(array[21], array[69]);
2889     array[69] = std::max(array[21], array[69]);
2890     array[21] = tmp;
2891     tmp = std::min(array[22], array[70]);
2892     array[70] = std::max(array[22], array[70]);
2893     array[22] = tmp;
2894     tmp = std::min(array[23], array[71]);
2895     array[71] = std::max(array[23], array[71]);
2896     array[23] = tmp;
2897     tmp = std::min(array[24], array[72]);
2898     array[72] = std::max(array[24], array[72]);
2899     array[24] = tmp;
2900     tmp = std::min(array[25], array[73]);
2901     array[73] = std::max(array[25], array[73]);
2902     array[25] = tmp;
2903     tmp = std::min(array[26], array[74]);
2904     array[74] = std::max(array[26], array[74]);
2905     array[26] = tmp;
2906     tmp = std::min(array[27], array[75]);
2907     array[75] = std::max(array[27], array[75]);
2908     array[27] = tmp;
2909     tmp = std::min(array[28], array[76]);
2910     array[76] = std::max(array[28], array[76]);
2911     array[28] = tmp;
2912     tmp = std::min(array[29], array[77]);
2913     array[77] = std::max(array[29], array[77]);
2914     array[29] = tmp;
2915     tmp = std::min(array[30], array[78]);
2916     array[78] = std::max(array[30], array[78]);
2917     array[30] = tmp;
2918     tmp = std::min(array[31], array[79]);
2919     array[79] = std::max(array[31], array[79]);
2920     array[31] = tmp;
2921     tmp = std::min(array[16], array[32]);
2922     array[32] = std::max(array[16], array[32]);
2923     array[16] = tmp;
2924     tmp = std::min(array[17], array[33]);
2925     array[33] = std::max(array[17], array[33]);
2926     array[17] = tmp;
2927     tmp = std::min(array[18], array[34]);
2928     array[34] = std::max(array[18], array[34]);
2929     array[18] = tmp;
2930     tmp = std::min(array[19], array[35]);
2931     array[35] = std::max(array[19], array[35]);
2932     array[19] = tmp;
2933     tmp = std::min(array[20], array[36]);
2934     array[36] = std::max(array[20], array[36]);
2935     array[20] = tmp;
2936     tmp = std::min(array[21], array[37]);
2937     array[37] = std::max(array[21], array[37]);
2938     array[21] = tmp;
2939     tmp = std::min(array[22], array[38]);
2940     array[38] = std::max(array[22], array[38]);
2941     array[22] = tmp;
2942     tmp = std::min(array[23], array[39]);
2943     array[39] = std::max(array[23], array[39]);
2944     array[23] = tmp;
2945     tmp = std::min(array[24], array[40]);
2946     array[40] = std::max(array[24], array[40]);
2947     array[24] = tmp;
2948     tmp = std::min(array[25], array[41]);
2949     array[41] = std::max(array[25], array[41]);
2950     array[25] = tmp;
2951     tmp = std::min(array[26], array[42]);
2952     array[42] = std::max(array[26], array[42]);
2953     array[26] = tmp;
2954     tmp = std::min(array[27], array[43]);
2955     array[43] = std::max(array[27], array[43]);
2956     array[27] = tmp;
2957     tmp = std::min(array[28], array[44]);
2958     array[44] = std::max(array[28], array[44]);
2959     array[28] = tmp;
2960     tmp = std::min(array[29], array[45]);
2961     array[45] = std::max(array[29], array[45]);
2962     array[29] = tmp;
2963     tmp = std::min(array[30], array[46]);
2964     array[46] = std::max(array[30], array[46]);
2965     array[30] = tmp;
2966     tmp = std::min(array[31], array[47]);
2967     array[47] = std::max(array[31], array[47]);
2968     array[31] = tmp;
2969     tmp = std::min(array[48], array[64]);
2970     array[64] = std::max(array[48], array[64]);
2971     array[48] = tmp;
2972     tmp = std::min(array[49], array[65]);
2973     array[65] = std::max(array[49], array[65]);
2974     array[49] = tmp;
2975     tmp = std::min(array[50], array[66]);
2976     array[66] = std::max(array[50], array[66]);
2977     array[50] = tmp;
2978     tmp = std::min(array[51], array[67]);
2979     array[67] = std::max(array[51], array[67]);
2980     array[51] = tmp;
2981     tmp = std::min(array[52], array[68]);
2982     array[68] = std::max(array[52], array[68]);
2983     array[52] = tmp;
2984     tmp = std::min(array[53], array[69]);
2985     array[69] = std::max(array[53], array[69]);
2986     array[53] = tmp;
2987     tmp = std::min(array[54], array[70]);
2988     array[70] = std::max(array[54], array[70]);
2989     array[54] = tmp;
2990     tmp = std::min(array[55], array[71]);
2991     array[71] = std::max(array[55], array[71]);
2992     array[55] = tmp;
2993     tmp = std::min(array[56], array[72]);
2994     array[72] = std::max(array[56], array[72]);
2995     array[56] = tmp;
2996     tmp = std::min(array[57], array[73]);
2997     array[73] = std::max(array[57], array[73]);
2998     array[57] = tmp;
2999     tmp = std::min(array[58], array[74]);
3000     array[74] = std::max(array[58], array[74]);
3001     array[58] = tmp;
3002     tmp = std::min(array[59], array[75]);
3003     array[75] = std::max(array[59], array[75]);
3004     array[59] = tmp;
3005     tmp = std::min(array[60], array[76]);
3006     array[76] = std::max(array[60], array[76]);
3007     array[60] = tmp;
3008     tmp = std::min(array[61], array[77]);
3009     array[77] = std::max(array[61], array[77]);
3010     array[61] = tmp;
3011     tmp = std::min(array[62], array[78]);
3012     array[78] = std::max(array[62], array[78]);
3013     array[62] = tmp;
3014     tmp = std::min(array[63], array[79]);
3015     array[79] = std::max(array[63], array[79]);
3016     array[63] = tmp;
3017     tmp = std::min(array[0], array[8]);
3018     array[8] = std::max(array[0], array[8]);
3019     array[0] = tmp;
3020     tmp = std::min(array[1], array[9]);
3021     array[9] = std::max(array[1], array[9]);
3022     array[1] = tmp;
3023     tmp = std::min(array[2], array[10]);
3024     array[10] = std::max(array[2], array[10]);
3025     array[2] = tmp;
3026     tmp = std::min(array[3], array[11]);
3027     array[11] = std::max(array[3], array[11]);
3028     array[3] = tmp;
3029     tmp = std::min(array[4], array[12]);
3030     array[12] = std::max(array[4], array[12]);
3031     array[4] = tmp;
3032     tmp = std::min(array[5], array[13]);
3033     array[13] = std::max(array[5], array[13]);
3034     array[5] = tmp;
3035     tmp = std::min(array[6], array[14]);
3036     array[14] = std::max(array[6], array[14]);
3037     array[6] = tmp;
3038     tmp = std::min(array[7], array[15]);
3039     array[15] = std::max(array[7], array[15]);
3040     array[7] = tmp;
3041     tmp = std::min(array[16], array[24]);
3042     array[24] = std::max(array[16], array[24]);
3043     array[16] = tmp;
3044     tmp = std::min(array[17], array[25]);
3045     array[25] = std::max(array[17], array[25]);
3046     array[17] = tmp;
3047     tmp = std::min(array[18], array[26]);
3048     array[26] = std::max(array[18], array[26]);
3049     array[18] = tmp;
3050     tmp = std::min(array[19], array[27]);
3051     array[27] = std::max(array[19], array[27]);
3052     array[19] = tmp;
3053     tmp = std::min(array[20], array[28]);
3054     array[28] = std::max(array[20], array[28]);
3055     array[20] = tmp;
3056     tmp = std::min(array[21], array[29]);
3057     array[29] = std::max(array[21], array[29]);
3058     array[21] = tmp;
3059     tmp = std::min(array[22], array[30]);
3060     array[30] = std::max(array[22], array[30]);
3061     array[22] = tmp;
3062     tmp = std::min(array[23], array[31]);
3063     array[31] = std::max(array[23], array[31]);
3064     array[23] = tmp;
3065     tmp = std::min(array[32], array[40]);
3066     array[40] = std::max(array[32], array[40]);
3067     array[32] = tmp;
3068     tmp = std::min(array[33], array[41]);
3069     array[41] = std::max(array[33], array[41]);
3070     array[33] = tmp;
3071     tmp = std::min(array[34], array[42]);
3072     array[42] = std::max(array[34], array[42]);
3073     array[34] = tmp;
3074     tmp = std::min(array[35], array[43]);
3075     array[43] = std::max(array[35], array[43]);
3076     array[35] = tmp;
3077     tmp = std::min(array[36], array[44]);
3078     array[44] = std::max(array[36], array[44]);
3079     array[36] = tmp;
3080     tmp = std::min(array[37], array[45]);
3081     array[45] = std::max(array[37], array[45]);
3082     array[37] = tmp;
3083     tmp = std::min(array[38], array[46]);
3084     array[46] = std::max(array[38], array[46]);
3085     array[38] = tmp;
3086     tmp = std::min(array[39], array[47]);
3087     array[47] = std::max(array[39], array[47]);
3088     array[39] = tmp;
3089     tmp = std::min(array[48], array[56]);
3090     array[56] = std::max(array[48], array[56]);
3091     array[48] = tmp;
3092     tmp = std::min(array[49], array[57]);
3093     array[57] = std::max(array[49], array[57]);
3094     array[49] = tmp;
3095     tmp = std::min(array[50], array[58]);
3096     array[58] = std::max(array[50], array[58]);
3097     array[50] = tmp;
3098     tmp = std::min(array[51], array[59]);
3099     array[59] = std::max(array[51], array[59]);
3100     array[51] = tmp;
3101     tmp = std::min(array[52], array[60]);
3102     array[60] = std::max(array[52], array[60]);
3103     array[52] = tmp;
3104     tmp = std::min(array[53], array[61]);
3105     array[61] = std::max(array[53], array[61]);
3106     array[53] = tmp;
3107     tmp = std::min(array[54], array[62]);
3108     array[62] = std::max(array[54], array[62]);
3109     array[54] = tmp;
3110     tmp = std::min(array[55], array[63]);
3111     array[63] = std::max(array[55], array[63]);
3112     array[55] = tmp;
3113     tmp = std::min(array[64], array[72]);
3114     array[72] = std::max(array[64], array[72]);
3115     array[64] = tmp;
3116     tmp = std::min(array[65], array[73]);
3117     array[73] = std::max(array[65], array[73]);
3118     array[65] = tmp;
3119     tmp = std::min(array[66], array[74]);
3120     array[74] = std::max(array[66], array[74]);
3121     array[66] = tmp;
3122     tmp = std::min(array[67], array[75]);
3123     array[75] = std::max(array[67], array[75]);
3124     array[67] = tmp;
3125     tmp = std::min(array[68], array[76]);
3126     array[76] = std::max(array[68], array[76]);
3127     array[68] = tmp;
3128     tmp = std::min(array[69], array[77]);
3129     array[77] = std::max(array[69], array[77]);
3130     array[69] = tmp;
3131     tmp = std::min(array[70], array[78]);
3132     array[78] = std::max(array[70], array[78]);
3133     array[70] = tmp;
3134     tmp = std::min(array[71], array[79]);
3135     array[79] = std::max(array[71], array[79]);
3136     array[71] = tmp;
3137     tmp = std::min(array[8], array[64]);
3138     array[64] = std::max(array[8], array[64]);
3139     array[8] = tmp;
3140     tmp = std::min(array[9], array[65]);
3141     array[65] = std::max(array[9], array[65]);
3142     array[9] = tmp;
3143     tmp = std::min(array[10], array[66]);
3144     array[66] = std::max(array[10], array[66]);
3145     array[10] = tmp;
3146     tmp = std::min(array[11], array[67]);
3147     array[67] = std::max(array[11], array[67]);
3148     array[11] = tmp;
3149     tmp = std::min(array[12], array[68]);
3150     array[68] = std::max(array[12], array[68]);
3151     array[12] = tmp;
3152     tmp = std::min(array[13], array[69]);
3153     array[69] = std::max(array[13], array[69]);
3154     array[13] = tmp;
3155     tmp = std::min(array[14], array[70]);
3156     array[70] = std::max(array[14], array[70]);
3157     array[14] = tmp;
3158     tmp = std::min(array[15], array[71]);
3159     array[71] = std::max(array[15], array[71]);
3160     array[15] = tmp;
3161     tmp = std::min(array[24], array[80]);
3162     array[80] = std::max(array[24], array[80]);
3163     array[24] = tmp;
3164     tmp = std::min(array[8], array[32]);
3165     array[32] = std::max(array[8], array[32]);
3166     array[8] = tmp;
3167     tmp = std::min(array[9], array[33]);
3168     array[33] = std::max(array[9], array[33]);
3169     array[9] = tmp;
3170     tmp = std::min(array[10], array[34]);
3171     array[34] = std::max(array[10], array[34]);
3172     array[10] = tmp;
3173     tmp = std::min(array[11], array[35]);
3174     array[35] = std::max(array[11], array[35]);
3175     array[11] = tmp;
3176     tmp = std::min(array[12], array[36]);
3177     array[36] = std::max(array[12], array[36]);
3178     array[12] = tmp;
3179     tmp = std::min(array[13], array[37]);
3180     array[37] = std::max(array[13], array[37]);
3181     array[13] = tmp;
3182     tmp = std::min(array[14], array[38]);
3183     array[38] = std::max(array[14], array[38]);
3184     array[14] = tmp;
3185     tmp = std::min(array[15], array[39]);
3186     array[39] = std::max(array[15], array[39]);
3187     array[15] = tmp;
3188     tmp = std::min(array[24], array[48]);
3189     array[48] = std::max(array[24], array[48]);
3190     array[24] = tmp;
3191     tmp = std::min(array[25], array[49]);
3192     array[49] = std::max(array[25], array[49]);
3193     array[25] = tmp;
3194     tmp = std::min(array[26], array[50]);
3195     array[50] = std::max(array[26], array[50]);
3196     array[26] = tmp;
3197     tmp = std::min(array[27], array[51]);
3198     array[51] = std::max(array[27], array[51]);
3199     array[27] = tmp;
3200     tmp = std::min(array[28], array[52]);
3201     array[52] = std::max(array[28], array[52]);
3202     array[28] = tmp;
3203     tmp = std::min(array[29], array[53]);
3204     array[53] = std::max(array[29], array[53]);
3205     array[29] = tmp;
3206     tmp = std::min(array[30], array[54]);
3207     array[54] = std::max(array[30], array[54]);
3208     array[30] = tmp;
3209     tmp = std::min(array[31], array[55]);
3210     array[55] = std::max(array[31], array[55]);
3211     array[31] = tmp;
3212     tmp = std::min(array[40], array[64]);
3213     array[64] = std::max(array[40], array[64]);
3214     array[40] = tmp;
3215     tmp = std::min(array[41], array[65]);
3216     array[65] = std::max(array[41], array[65]);
3217     array[41] = tmp;
3218     tmp = std::min(array[42], array[66]);
3219     array[66] = std::max(array[42], array[66]);
3220     array[42] = tmp;
3221     tmp = std::min(array[43], array[67]);
3222     array[67] = std::max(array[43], array[67]);
3223     array[43] = tmp;
3224     tmp = std::min(array[44], array[68]);
3225     array[68] = std::max(array[44], array[68]);
3226     array[44] = tmp;
3227     tmp = std::min(array[45], array[69]);
3228     array[69] = std::max(array[45], array[69]);
3229     array[45] = tmp;
3230     tmp = std::min(array[46], array[70]);
3231     array[70] = std::max(array[46], array[70]);
3232     array[46] = tmp;
3233     tmp = std::min(array[47], array[71]);
3234     array[71] = std::max(array[47], array[71]);
3235     array[47] = tmp;
3236     tmp = std::min(array[56], array[80]);
3237     array[80] = std::max(array[56], array[80]);
3238     array[56] = tmp;
3239     tmp = std::min(array[8], array[16]);
3240     array[16] = std::max(array[8], array[16]);
3241     array[8] = tmp;
3242     tmp = std::min(array[9], array[17]);
3243     array[17] = std::max(array[9], array[17]);
3244     array[9] = tmp;
3245     tmp = std::min(array[10], array[18]);
3246     array[18] = std::max(array[10], array[18]);
3247     array[10] = tmp;
3248     tmp = std::min(array[11], array[19]);
3249     array[19] = std::max(array[11], array[19]);
3250     array[11] = tmp;
3251     tmp = std::min(array[12], array[20]);
3252     array[20] = std::max(array[12], array[20]);
3253     array[12] = tmp;
3254     tmp = std::min(array[13], array[21]);
3255     array[21] = std::max(array[13], array[21]);
3256     array[13] = tmp;
3257     tmp = std::min(array[14], array[22]);
3258     array[22] = std::max(array[14], array[22]);
3259     array[14] = tmp;
3260     tmp = std::min(array[15], array[23]);
3261     array[23] = std::max(array[15], array[23]);
3262     array[15] = tmp;
3263     tmp = std::min(array[24], array[32]);
3264     array[32] = std::max(array[24], array[32]);
3265     array[24] = tmp;
3266     tmp = std::min(array[25], array[33]);
3267     array[33] = std::max(array[25], array[33]);
3268     array[25] = tmp;
3269     tmp = std::min(array[26], array[34]);
3270     array[34] = std::max(array[26], array[34]);
3271     array[26] = tmp;
3272     tmp = std::min(array[27], array[35]);
3273     array[35] = std::max(array[27], array[35]);
3274     array[27] = tmp;
3275     tmp = std::min(array[28], array[36]);
3276     array[36] = std::max(array[28], array[36]);
3277     array[28] = tmp;
3278     tmp = std::min(array[29], array[37]);
3279     array[37] = std::max(array[29], array[37]);
3280     array[29] = tmp;
3281     tmp = std::min(array[30], array[38]);
3282     array[38] = std::max(array[30], array[38]);
3283     array[30] = tmp;
3284     tmp = std::min(array[31], array[39]);
3285     array[39] = std::max(array[31], array[39]);
3286     array[31] = tmp;
3287     tmp = std::min(array[40], array[48]);
3288     array[48] = std::max(array[40], array[48]);
3289     array[40] = tmp;
3290     tmp = std::min(array[41], array[49]);
3291     array[49] = std::max(array[41], array[49]);
3292     array[41] = tmp;
3293     tmp = std::min(array[42], array[50]);
3294     array[50] = std::max(array[42], array[50]);
3295     array[42] = tmp;
3296     tmp = std::min(array[43], array[51]);
3297     array[51] = std::max(array[43], array[51]);
3298     array[43] = tmp;
3299     tmp = std::min(array[44], array[52]);
3300     array[52] = std::max(array[44], array[52]);
3301     array[44] = tmp;
3302     tmp = std::min(array[45], array[53]);
3303     array[53] = std::max(array[45], array[53]);
3304     array[45] = tmp;
3305     tmp = std::min(array[46], array[54]);
3306     array[54] = std::max(array[46], array[54]);
3307     array[46] = tmp;
3308     tmp = std::min(array[47], array[55]);
3309     array[55] = std::max(array[47], array[55]);
3310     array[47] = tmp;
3311     tmp = std::min(array[56], array[64]);
3312     array[64] = std::max(array[56], array[64]);
3313     array[56] = tmp;
3314     tmp = std::min(array[57], array[65]);
3315     array[65] = std::max(array[57], array[65]);
3316     array[57] = tmp;
3317     tmp = std::min(array[58], array[66]);
3318     array[66] = std::max(array[58], array[66]);
3319     array[58] = tmp;
3320     tmp = std::min(array[59], array[67]);
3321     array[67] = std::max(array[59], array[67]);
3322     array[59] = tmp;
3323     tmp = std::min(array[60], array[68]);
3324     array[68] = std::max(array[60], array[68]);
3325     array[60] = tmp;
3326     tmp = std::min(array[61], array[69]);
3327     array[69] = std::max(array[61], array[69]);
3328     array[61] = tmp;
3329     tmp = std::min(array[62], array[70]);
3330     array[70] = std::max(array[62], array[70]);
3331     array[62] = tmp;
3332     tmp = std::min(array[63], array[71]);
3333     array[71] = std::max(array[63], array[71]);
3334     array[63] = tmp;
3335     tmp = std::min(array[72], array[80]);
3336     array[80] = std::max(array[72], array[80]);
3337     array[72] = tmp;
3338     tmp = std::min(array[0], array[4]);
3339     array[4] = std::max(array[0], array[4]);
3340     array[0] = tmp;
3341     tmp = std::min(array[1], array[5]);
3342     array[5] = std::max(array[1], array[5]);
3343     array[1] = tmp;
3344     tmp = std::min(array[2], array[6]);
3345     array[6] = std::max(array[2], array[6]);
3346     array[2] = tmp;
3347     tmp = std::min(array[3], array[7]);
3348     array[7] = std::max(array[3], array[7]);
3349     array[3] = tmp;
3350     tmp = std::min(array[8], array[12]);
3351     array[12] = std::max(array[8], array[12]);
3352     array[8] = tmp;
3353     tmp = std::min(array[9], array[13]);
3354     array[13] = std::max(array[9], array[13]);
3355     array[9] = tmp;
3356     tmp = std::min(array[10], array[14]);
3357     array[14] = std::max(array[10], array[14]);
3358     array[10] = tmp;
3359     tmp = std::min(array[11], array[15]);
3360     array[15] = std::max(array[11], array[15]);
3361     array[11] = tmp;
3362     tmp = std::min(array[16], array[20]);
3363     array[20] = std::max(array[16], array[20]);
3364     array[16] = tmp;
3365     tmp = std::min(array[17], array[21]);
3366     array[21] = std::max(array[17], array[21]);
3367     array[17] = tmp;
3368     tmp = std::min(array[18], array[22]);
3369     array[22] = std::max(array[18], array[22]);
3370     array[18] = tmp;
3371     tmp = std::min(array[19], array[23]);
3372     array[23] = std::max(array[19], array[23]);
3373     array[19] = tmp;
3374     tmp = std::min(array[24], array[28]);
3375     array[28] = std::max(array[24], array[28]);
3376     array[24] = tmp;
3377     tmp = std::min(array[25], array[29]);
3378     array[29] = std::max(array[25], array[29]);
3379     array[25] = tmp;
3380     tmp = std::min(array[26], array[30]);
3381     array[30] = std::max(array[26], array[30]);
3382     array[26] = tmp;
3383     tmp = std::min(array[27], array[31]);
3384     array[31] = std::max(array[27], array[31]);
3385     array[27] = tmp;
3386     tmp = std::min(array[32], array[36]);
3387     array[36] = std::max(array[32], array[36]);
3388     array[32] = tmp;
3389     tmp = std::min(array[33], array[37]);
3390     array[37] = std::max(array[33], array[37]);
3391     array[33] = tmp;
3392     tmp = std::min(array[34], array[38]);
3393     array[38] = std::max(array[34], array[38]);
3394     array[34] = tmp;
3395     tmp = std::min(array[35], array[39]);
3396     array[39] = std::max(array[35], array[39]);
3397     array[35] = tmp;
3398     tmp = std::min(array[40], array[44]);
3399     array[44] = std::max(array[40], array[44]);
3400     array[40] = tmp;
3401     tmp = std::min(array[41], array[45]);
3402     array[45] = std::max(array[41], array[45]);
3403     array[41] = tmp;
3404     tmp = std::min(array[42], array[46]);
3405     array[46] = std::max(array[42], array[46]);
3406     array[42] = tmp;
3407     tmp = std::min(array[43], array[47]);
3408     array[47] = std::max(array[43], array[47]);
3409     array[43] = tmp;
3410     tmp = std::min(array[48], array[52]);
3411     array[52] = std::max(array[48], array[52]);
3412     array[48] = tmp;
3413     tmp = std::min(array[49], array[53]);
3414     array[53] = std::max(array[49], array[53]);
3415     array[49] = tmp;
3416     tmp = std::min(array[50], array[54]);
3417     array[54] = std::max(array[50], array[54]);
3418     array[50] = tmp;
3419     tmp = std::min(array[51], array[55]);
3420     array[55] = std::max(array[51], array[55]);
3421     array[51] = tmp;
3422     tmp = std::min(array[56], array[60]);
3423     array[60] = std::max(array[56], array[60]);
3424     array[56] = tmp;
3425     tmp = std::min(array[57], array[61]);
3426     array[61] = std::max(array[57], array[61]);
3427     array[57] = tmp;
3428     tmp = std::min(array[58], array[62]);
3429     array[62] = std::max(array[58], array[62]);
3430     array[58] = tmp;
3431     tmp = std::min(array[59], array[63]);
3432     array[63] = std::max(array[59], array[63]);
3433     array[59] = tmp;
3434     tmp = std::min(array[64], array[68]);
3435     array[68] = std::max(array[64], array[68]);
3436     array[64] = tmp;
3437     tmp = std::min(array[65], array[69]);
3438     array[69] = std::max(array[65], array[69]);
3439     array[65] = tmp;
3440     tmp = std::min(array[66], array[70]);
3441     array[70] = std::max(array[66], array[70]);
3442     array[66] = tmp;
3443     tmp = std::min(array[67], array[71]);
3444     array[71] = std::max(array[67], array[71]);
3445     array[67] = tmp;
3446     tmp = std::min(array[72], array[76]);
3447     array[76] = std::max(array[72], array[76]);
3448     array[72] = tmp;
3449     tmp = std::min(array[73], array[77]);
3450     array[77] = std::max(array[73], array[77]);
3451     array[73] = tmp;
3452     tmp = std::min(array[74], array[78]);
3453     array[78] = std::max(array[74], array[78]);
3454     array[74] = tmp;
3455     tmp = std::min(array[75], array[79]);
3456     array[79] = std::max(array[75], array[79]);
3457     array[75] = tmp;
3458     tmp = std::min(array[4], array[64]);
3459     array[64] = std::max(array[4], array[64]);
3460     array[4] = tmp;
3461     tmp = std::min(array[5], array[65]);
3462     array[65] = std::max(array[5], array[65]);
3463     array[5] = tmp;
3464     tmp = std::min(array[6], array[66]);
3465     array[66] = std::max(array[6], array[66]);
3466     array[6] = tmp;
3467     tmp = std::min(array[7], array[67]);
3468     array[67] = std::max(array[7], array[67]);
3469     array[7] = tmp;
3470     tmp = std::min(array[12], array[72]);
3471     array[72] = std::max(array[12], array[72]);
3472     array[12] = tmp;
3473     tmp = std::min(array[13], array[73]);
3474     array[73] = std::max(array[13], array[73]);
3475     array[13] = tmp;
3476     tmp = std::min(array[14], array[74]);
3477     array[74] = std::max(array[14], array[74]);
3478     array[14] = tmp;
3479     tmp = std::min(array[15], array[75]);
3480     array[75] = std::max(array[15], array[75]);
3481     array[15] = tmp;
3482     tmp = std::min(array[20], array[80]);
3483     array[80] = std::max(array[20], array[80]);
3484     array[20] = tmp;
3485     tmp = std::min(array[4], array[32]);
3486     array[32] = std::max(array[4], array[32]);
3487     array[4] = tmp;
3488     tmp = std::min(array[5], array[33]);
3489     array[33] = std::max(array[5], array[33]);
3490     array[5] = tmp;
3491     tmp = std::min(array[6], array[34]);
3492     array[34] = std::max(array[6], array[34]);
3493     array[6] = tmp;
3494     tmp = std::min(array[7], array[35]);
3495     array[35] = std::max(array[7], array[35]);
3496     array[7] = tmp;
3497     tmp = std::min(array[12], array[40]);
3498     array[40] = std::max(array[12], array[40]);
3499     array[12] = tmp;
3500     tmp = std::min(array[13], array[41]);
3501     array[41] = std::max(array[13], array[41]);
3502     array[13] = tmp;
3503     tmp = std::min(array[14], array[42]);
3504     array[42] = std::max(array[14], array[42]);
3505     array[14] = tmp;
3506     tmp = std::min(array[15], array[43]);
3507     array[43] = std::max(array[15], array[43]);
3508     array[15] = tmp;
3509     tmp = std::min(array[20], array[48]);
3510     array[48] = std::max(array[20], array[48]);
3511     array[20] = tmp;
3512     tmp = std::min(array[21], array[49]);
3513     array[49] = std::max(array[21], array[49]);
3514     array[21] = tmp;
3515     tmp = std::min(array[22], array[50]);
3516     array[50] = std::max(array[22], array[50]);
3517     array[22] = tmp;
3518     tmp = std::min(array[23], array[51]);
3519     array[51] = std::max(array[23], array[51]);
3520     array[23] = tmp;
3521     tmp = std::min(array[28], array[56]);
3522     array[56] = std::max(array[28], array[56]);
3523     array[28] = tmp;
3524     tmp = std::min(array[29], array[57]);
3525     array[57] = std::max(array[29], array[57]);
3526     array[29] = tmp;
3527     tmp = std::min(array[30], array[58]);
3528     array[58] = std::max(array[30], array[58]);
3529     array[30] = tmp;
3530     tmp = std::min(array[31], array[59]);
3531     array[59] = std::max(array[31], array[59]);
3532     array[31] = tmp;
3533     tmp = std::min(array[36], array[64]);
3534     array[64] = std::max(array[36], array[64]);
3535     array[36] = tmp;
3536     tmp = std::min(array[37], array[65]);
3537     array[65] = std::max(array[37], array[65]);
3538     array[37] = tmp;
3539     tmp = std::min(array[38], array[66]);
3540     array[66] = std::max(array[38], array[66]);
3541     array[38] = tmp;
3542     tmp = std::min(array[39], array[67]);
3543     array[67] = std::max(array[39], array[67]);
3544     array[39] = tmp;
3545     tmp = std::min(array[44], array[72]);
3546     array[72] = std::max(array[44], array[72]);
3547     array[44] = tmp;
3548     tmp = std::min(array[45], array[73]);
3549     array[73] = std::max(array[45], array[73]);
3550     array[45] = tmp;
3551     tmp = std::min(array[46], array[74]);
3552     array[74] = std::max(array[46], array[74]);
3553     array[46] = tmp;
3554     tmp = std::min(array[47], array[75]);
3555     array[75] = std::max(array[47], array[75]);
3556     array[47] = tmp;
3557     tmp = std::min(array[52], array[80]);
3558     array[80] = std::max(array[52], array[80]);
3559     array[52] = tmp;
3560     tmp = std::min(array[4], array[16]);
3561     array[16] = std::max(array[4], array[16]);
3562     array[4] = tmp;
3563     tmp = std::min(array[5], array[17]);
3564     array[17] = std::max(array[5], array[17]);
3565     array[5] = tmp;
3566     tmp = std::min(array[6], array[18]);
3567     array[18] = std::max(array[6], array[18]);
3568     array[6] = tmp;
3569     tmp = std::min(array[7], array[19]);
3570     array[19] = std::max(array[7], array[19]);
3571     array[7] = tmp;
3572     tmp = std::min(array[12], array[24]);
3573     array[24] = std::max(array[12], array[24]);
3574     array[12] = tmp;
3575     tmp = std::min(array[13], array[25]);
3576     array[25] = std::max(array[13], array[25]);
3577     array[13] = tmp;
3578     tmp = std::min(array[14], array[26]);
3579     array[26] = std::max(array[14], array[26]);
3580     array[14] = tmp;
3581     tmp = std::min(array[15], array[27]);
3582     array[27] = std::max(array[15], array[27]);
3583     array[15] = tmp;
3584     tmp = std::min(array[20], array[32]);
3585     array[32] = std::max(array[20], array[32]);
3586     array[20] = tmp;
3587     tmp = std::min(array[21], array[33]);
3588     array[33] = std::max(array[21], array[33]);
3589     array[21] = tmp;
3590     tmp = std::min(array[22], array[34]);
3591     array[34] = std::max(array[22], array[34]);
3592     array[22] = tmp;
3593     tmp = std::min(array[23], array[35]);
3594     array[35] = std::max(array[23], array[35]);
3595     array[23] = tmp;
3596     tmp = std::min(array[28], array[40]);
3597     array[40] = std::max(array[28], array[40]);
3598     array[28] = tmp;
3599     tmp = std::min(array[29], array[41]);
3600     array[41] = std::max(array[29], array[41]);
3601     array[29] = tmp;
3602     tmp = std::min(array[30], array[42]);
3603     array[42] = std::max(array[30], array[42]);
3604     array[30] = tmp;
3605     tmp = std::min(array[31], array[43]);
3606     array[43] = std::max(array[31], array[43]);
3607     array[31] = tmp;
3608     tmp = std::min(array[36], array[48]);
3609     array[48] = std::max(array[36], array[48]);
3610     array[36] = tmp;
3611     tmp = std::min(array[37], array[49]);
3612     array[49] = std::max(array[37], array[49]);
3613     array[37] = tmp;
3614     tmp = std::min(array[38], array[50]);
3615     array[50] = std::max(array[38], array[50]);
3616     array[38] = tmp;
3617     tmp = std::min(array[39], array[51]);
3618     array[51] = std::max(array[39], array[51]);
3619     array[39] = tmp;
3620     tmp = std::min(array[44], array[56]);
3621     array[56] = std::max(array[44], array[56]);
3622     array[44] = tmp;
3623     tmp = std::min(array[45], array[57]);
3624     array[57] = std::max(array[45], array[57]);
3625     array[45] = tmp;
3626     tmp = std::min(array[46], array[58]);
3627     array[58] = std::max(array[46], array[58]);
3628     array[46] = tmp;
3629     tmp = std::min(array[47], array[59]);
3630     array[59] = std::max(array[47], array[59]);
3631     array[47] = tmp;
3632     tmp = std::min(array[52], array[64]);
3633     array[64] = std::max(array[52], array[64]);
3634     array[52] = tmp;
3635     tmp = std::min(array[53], array[65]);
3636     array[65] = std::max(array[53], array[65]);
3637     array[53] = tmp;
3638     tmp = std::min(array[54], array[66]);
3639     array[66] = std::max(array[54], array[66]);
3640     array[54] = tmp;
3641     tmp = std::min(array[55], array[67]);
3642     array[67] = std::max(array[55], array[67]);
3643     array[55] = tmp;
3644     tmp = std::min(array[60], array[72]);
3645     array[72] = std::max(array[60], array[72]);
3646     array[60] = tmp;
3647     tmp = std::min(array[61], array[73]);
3648     array[73] = std::max(array[61], array[73]);
3649     array[61] = tmp;
3650     tmp = std::min(array[62], array[74]);
3651     array[74] = std::max(array[62], array[74]);
3652     array[62] = tmp;
3653     tmp = std::min(array[63], array[75]);
3654     array[75] = std::max(array[63], array[75]);
3655     array[63] = tmp;
3656     tmp = std::min(array[68], array[80]);
3657     array[80] = std::max(array[68], array[80]);
3658     array[68] = tmp;
3659     tmp = std::min(array[4], array[8]);
3660     array[8] = std::max(array[4], array[8]);
3661     array[4] = tmp;
3662     tmp = std::min(array[5], array[9]);
3663     array[9] = std::max(array[5], array[9]);
3664     array[5] = tmp;
3665     tmp = std::min(array[6], array[10]);
3666     array[10] = std::max(array[6], array[10]);
3667     array[6] = tmp;
3668     tmp = std::min(array[7], array[11]);
3669     array[11] = std::max(array[7], array[11]);
3670     array[7] = tmp;
3671     tmp = std::min(array[12], array[16]);
3672     array[16] = std::max(array[12], array[16]);
3673     array[12] = tmp;
3674     tmp = std::min(array[13], array[17]);
3675     array[17] = std::max(array[13], array[17]);
3676     array[13] = tmp;
3677     tmp = std::min(array[14], array[18]);
3678     array[18] = std::max(array[14], array[18]);
3679     array[14] = tmp;
3680     tmp = std::min(array[15], array[19]);
3681     array[19] = std::max(array[15], array[19]);
3682     array[15] = tmp;
3683     tmp = std::min(array[20], array[24]);
3684     array[24] = std::max(array[20], array[24]);
3685     array[20] = tmp;
3686     tmp = std::min(array[21], array[25]);
3687     array[25] = std::max(array[21], array[25]);
3688     array[21] = tmp;
3689     tmp = std::min(array[22], array[26]);
3690     array[26] = std::max(array[22], array[26]);
3691     array[22] = tmp;
3692     tmp = std::min(array[23], array[27]);
3693     array[27] = std::max(array[23], array[27]);
3694     array[23] = tmp;
3695     tmp = std::min(array[28], array[32]);
3696     array[32] = std::max(array[28], array[32]);
3697     array[28] = tmp;
3698     tmp = std::min(array[29], array[33]);
3699     array[33] = std::max(array[29], array[33]);
3700     array[29] = tmp;
3701     tmp = std::min(array[30], array[34]);
3702     array[34] = std::max(array[30], array[34]);
3703     array[30] = tmp;
3704     tmp = std::min(array[31], array[35]);
3705     array[35] = std::max(array[31], array[35]);
3706     array[31] = tmp;
3707     tmp = std::min(array[36], array[40]);
3708     array[40] = std::max(array[36], array[40]);
3709     array[36] = tmp;
3710     tmp = std::min(array[37], array[41]);
3711     array[41] = std::max(array[37], array[41]);
3712     array[37] = tmp;
3713     tmp = std::min(array[38], array[42]);
3714     array[42] = std::max(array[38], array[42]);
3715     array[38] = tmp;
3716     tmp = std::min(array[39], array[43]);
3717     array[43] = std::max(array[39], array[43]);
3718     array[39] = tmp;
3719     tmp = std::min(array[44], array[48]);
3720     array[48] = std::max(array[44], array[48]);
3721     array[44] = tmp;
3722     tmp = std::min(array[45], array[49]);
3723     array[49] = std::max(array[45], array[49]);
3724     array[45] = tmp;
3725     tmp = std::min(array[46], array[50]);
3726     array[50] = std::max(array[46], array[50]);
3727     array[46] = tmp;
3728     tmp = std::min(array[47], array[51]);
3729     array[51] = std::max(array[47], array[51]);
3730     array[47] = tmp;
3731     tmp = std::min(array[52], array[56]);
3732     array[56] = std::max(array[52], array[56]);
3733     array[52] = tmp;
3734     tmp = std::min(array[53], array[57]);
3735     array[57] = std::max(array[53], array[57]);
3736     array[53] = tmp;
3737     tmp = std::min(array[54], array[58]);
3738     array[58] = std::max(array[54], array[58]);
3739     array[54] = tmp;
3740     tmp = std::min(array[55], array[59]);
3741     array[59] = std::max(array[55], array[59]);
3742     array[55] = tmp;
3743     tmp = std::min(array[60], array[64]);
3744     array[64] = std::max(array[60], array[64]);
3745     array[60] = tmp;
3746     tmp = std::min(array[61], array[65]);
3747     array[65] = std::max(array[61], array[65]);
3748     array[61] = tmp;
3749     tmp = std::min(array[62], array[66]);
3750     array[66] = std::max(array[62], array[66]);
3751     array[62] = tmp;
3752     tmp = std::min(array[63], array[67]);
3753     array[67] = std::max(array[63], array[67]);
3754     array[63] = tmp;
3755     tmp = std::min(array[68], array[72]);
3756     array[72] = std::max(array[68], array[72]);
3757     array[68] = tmp;
3758     tmp = std::min(array[69], array[73]);
3759     array[73] = std::max(array[69], array[73]);
3760     array[69] = tmp;
3761     tmp = std::min(array[70], array[74]);
3762     array[74] = std::max(array[70], array[74]);
3763     array[70] = tmp;
3764     tmp = std::min(array[71], array[75]);
3765     array[75] = std::max(array[71], array[75]);
3766     array[71] = tmp;
3767     tmp = std::min(array[76], array[80]);
3768     array[80] = std::max(array[76], array[80]);
3769     array[76] = tmp;
3770     tmp = std::min(array[0], array[2]);
3771     array[2] = std::max(array[0], array[2]);
3772     array[0] = tmp;
3773     tmp = std::min(array[1], array[3]);
3774     array[3] = std::max(array[1], array[3]);
3775     array[1] = tmp;
3776     tmp = std::min(array[4], array[6]);
3777     array[6] = std::max(array[4], array[6]);
3778     array[4] = tmp;
3779     tmp = std::min(array[5], array[7]);
3780     array[7] = std::max(array[5], array[7]);
3781     array[5] = tmp;
3782     tmp = std::min(array[8], array[10]);
3783     array[10] = std::max(array[8], array[10]);
3784     array[8] = tmp;
3785     tmp = std::min(array[9], array[11]);
3786     array[11] = std::max(array[9], array[11]);
3787     array[9] = tmp;
3788     tmp = std::min(array[12], array[14]);
3789     array[14] = std::max(array[12], array[14]);
3790     array[12] = tmp;
3791     tmp = std::min(array[13], array[15]);
3792     array[15] = std::max(array[13], array[15]);
3793     array[13] = tmp;
3794     tmp = std::min(array[16], array[18]);
3795     array[18] = std::max(array[16], array[18]);
3796     array[16] = tmp;
3797     tmp = std::min(array[17], array[19]);
3798     array[19] = std::max(array[17], array[19]);
3799     array[17] = tmp;
3800     tmp = std::min(array[20], array[22]);
3801     array[22] = std::max(array[20], array[22]);
3802     array[20] = tmp;
3803     tmp = std::min(array[21], array[23]);
3804     array[23] = std::max(array[21], array[23]);
3805     array[21] = tmp;
3806     tmp = std::min(array[24], array[26]);
3807     array[26] = std::max(array[24], array[26]);
3808     array[24] = tmp;
3809     tmp = std::min(array[25], array[27]);
3810     array[27] = std::max(array[25], array[27]);
3811     array[25] = tmp;
3812     tmp = std::min(array[28], array[30]);
3813     array[30] = std::max(array[28], array[30]);
3814     array[28] = tmp;
3815     tmp = std::min(array[29], array[31]);
3816     array[31] = std::max(array[29], array[31]);
3817     array[29] = tmp;
3818     tmp = std::min(array[32], array[34]);
3819     array[34] = std::max(array[32], array[34]);
3820     array[32] = tmp;
3821     tmp = std::min(array[33], array[35]);
3822     array[35] = std::max(array[33], array[35]);
3823     array[33] = tmp;
3824     tmp = std::min(array[36], array[38]);
3825     array[38] = std::max(array[36], array[38]);
3826     array[36] = tmp;
3827     tmp = std::min(array[37], array[39]);
3828     array[39] = std::max(array[37], array[39]);
3829     array[37] = tmp;
3830     tmp = std::min(array[40], array[42]);
3831     array[42] = std::max(array[40], array[42]);
3832     array[40] = tmp;
3833     tmp = std::min(array[41], array[43]);
3834     array[43] = std::max(array[41], array[43]);
3835     array[41] = tmp;
3836     tmp = std::min(array[44], array[46]);
3837     array[46] = std::max(array[44], array[46]);
3838     array[44] = tmp;
3839     tmp = std::min(array[45], array[47]);
3840     array[47] = std::max(array[45], array[47]);
3841     array[45] = tmp;
3842     tmp = std::min(array[48], array[50]);
3843     array[50] = std::max(array[48], array[50]);
3844     array[48] = tmp;
3845     tmp = std::min(array[49], array[51]);
3846     array[51] = std::max(array[49], array[51]);
3847     array[49] = tmp;
3848     tmp = std::min(array[52], array[54]);
3849     array[54] = std::max(array[52], array[54]);
3850     array[52] = tmp;
3851     tmp = std::min(array[53], array[55]);
3852     array[55] = std::max(array[53], array[55]);
3853     array[53] = tmp;
3854     tmp = std::min(array[56], array[58]);
3855     array[58] = std::max(array[56], array[58]);
3856     array[56] = tmp;
3857     tmp = std::min(array[57], array[59]);
3858     array[59] = std::max(array[57], array[59]);
3859     array[57] = tmp;
3860     tmp = std::min(array[60], array[62]);
3861     array[62] = std::max(array[60], array[62]);
3862     array[60] = tmp;
3863     tmp = std::min(array[61], array[63]);
3864     array[63] = std::max(array[61], array[63]);
3865     array[61] = tmp;
3866     tmp = std::min(array[64], array[66]);
3867     array[66] = std::max(array[64], array[66]);
3868     array[64] = tmp;
3869     tmp = std::min(array[65], array[67]);
3870     array[67] = std::max(array[65], array[67]);
3871     array[65] = tmp;
3872     tmp = std::min(array[68], array[70]);
3873     array[70] = std::max(array[68], array[70]);
3874     array[68] = tmp;
3875     tmp = std::min(array[69], array[71]);
3876     array[71] = std::max(array[69], array[71]);
3877     array[69] = tmp;
3878     tmp = std::min(array[72], array[74]);
3879     array[74] = std::max(array[72], array[74]);
3880     array[72] = tmp;
3881     tmp = std::min(array[73], array[75]);
3882     array[75] = std::max(array[73], array[75]);
3883     array[73] = tmp;
3884     tmp = std::min(array[76], array[78]);
3885     array[78] = std::max(array[76], array[78]);
3886     array[76] = tmp;
3887     tmp = std::min(array[77], array[79]);
3888     array[79] = std::max(array[77], array[79]);
3889     array[77] = tmp;
3890     tmp = std::min(array[2], array[64]);
3891     array[64] = std::max(array[2], array[64]);
3892     array[2] = tmp;
3893     tmp = std::min(array[3], array[65]);
3894     array[65] = std::max(array[3], array[65]);
3895     array[3] = tmp;
3896     tmp = std::min(array[6], array[68]);
3897     array[68] = std::max(array[6], array[68]);
3898     array[6] = tmp;
3899     tmp = std::min(array[7], array[69]);
3900     array[69] = std::max(array[7], array[69]);
3901     array[7] = tmp;
3902     tmp = std::min(array[10], array[72]);
3903     array[72] = std::max(array[10], array[72]);
3904     array[10] = tmp;
3905     tmp = std::min(array[11], array[73]);
3906     array[73] = std::max(array[11], array[73]);
3907     array[11] = tmp;
3908     tmp = std::min(array[14], array[76]);
3909     array[76] = std::max(array[14], array[76]);
3910     array[14] = tmp;
3911     tmp = std::min(array[15], array[77]);
3912     array[77] = std::max(array[15], array[77]);
3913     array[15] = tmp;
3914     tmp = std::min(array[18], array[80]);
3915     array[80] = std::max(array[18], array[80]);
3916     array[18] = tmp;
3917     tmp = std::min(array[2], array[32]);
3918     array[32] = std::max(array[2], array[32]);
3919     array[2] = tmp;
3920     tmp = std::min(array[3], array[33]);
3921     array[33] = std::max(array[3], array[33]);
3922     array[3] = tmp;
3923     tmp = std::min(array[6], array[36]);
3924     array[36] = std::max(array[6], array[36]);
3925     array[6] = tmp;
3926     tmp = std::min(array[7], array[37]);
3927     array[37] = std::max(array[7], array[37]);
3928     array[7] = tmp;
3929     tmp = std::min(array[10], array[40]);
3930     array[40] = std::max(array[10], array[40]);
3931     array[10] = tmp;
3932     tmp = std::min(array[11], array[41]);
3933     array[41] = std::max(array[11], array[41]);
3934     array[11] = tmp;
3935     tmp = std::min(array[14], array[44]);
3936     array[44] = std::max(array[14], array[44]);
3937     array[14] = tmp;
3938     tmp = std::min(array[15], array[45]);
3939     array[45] = std::max(array[15], array[45]);
3940     array[15] = tmp;
3941     tmp = std::min(array[18], array[48]);
3942     array[48] = std::max(array[18], array[48]);
3943     array[18] = tmp;
3944     tmp = std::min(array[19], array[49]);
3945     array[49] = std::max(array[19], array[49]);
3946     array[19] = tmp;
3947     tmp = std::min(array[22], array[52]);
3948     array[52] = std::max(array[22], array[52]);
3949     array[22] = tmp;
3950     tmp = std::min(array[23], array[53]);
3951     array[53] = std::max(array[23], array[53]);
3952     array[23] = tmp;
3953     tmp = std::min(array[26], array[56]);
3954     array[56] = std::max(array[26], array[56]);
3955     array[26] = tmp;
3956     tmp = std::min(array[27], array[57]);
3957     array[57] = std::max(array[27], array[57]);
3958     array[27] = tmp;
3959     tmp = std::min(array[30], array[60]);
3960     array[60] = std::max(array[30], array[60]);
3961     array[30] = tmp;
3962     tmp = std::min(array[31], array[61]);
3963     array[61] = std::max(array[31], array[61]);
3964     array[31] = tmp;
3965     tmp = std::min(array[34], array[64]);
3966     array[64] = std::max(array[34], array[64]);
3967     array[34] = tmp;
3968     tmp = std::min(array[35], array[65]);
3969     array[65] = std::max(array[35], array[65]);
3970     array[35] = tmp;
3971     tmp = std::min(array[38], array[68]);
3972     array[68] = std::max(array[38], array[68]);
3973     array[38] = tmp;
3974     tmp = std::min(array[39], array[69]);
3975     array[69] = std::max(array[39], array[69]);
3976     array[39] = tmp;
3977     tmp = std::min(array[42], array[72]);
3978     array[72] = std::max(array[42], array[72]);
3979     array[42] = tmp;
3980     tmp = std::min(array[43], array[73]);
3981     array[73] = std::max(array[43], array[73]);
3982     array[43] = tmp;
3983     tmp = std::min(array[46], array[76]);
3984     array[76] = std::max(array[46], array[76]);
3985     array[46] = tmp;
3986     tmp = std::min(array[47], array[77]);
3987     array[77] = std::max(array[47], array[77]);
3988     array[47] = tmp;
3989     tmp = std::min(array[50], array[80]);
3990     array[80] = std::max(array[50], array[80]);
3991     array[50] = tmp;
3992     tmp = std::min(array[2], array[16]);
3993     array[16] = std::max(array[2], array[16]);
3994     array[2] = tmp;
3995     tmp = std::min(array[3], array[17]);
3996     array[17] = std::max(array[3], array[17]);
3997     array[3] = tmp;
3998     tmp = std::min(array[6], array[20]);
3999     array[20] = std::max(array[6], array[20]);
4000     array[6] = tmp;
4001     tmp = std::min(array[7], array[21]);
4002     array[21] = std::max(array[7], array[21]);
4003     array[7] = tmp;
4004     tmp = std::min(array[10], array[24]);
4005     array[24] = std::max(array[10], array[24]);
4006     array[10] = tmp;
4007     tmp = std::min(array[11], array[25]);
4008     array[25] = std::max(array[11], array[25]);
4009     array[11] = tmp;
4010     tmp = std::min(array[14], array[28]);
4011     array[28] = std::max(array[14], array[28]);
4012     array[14] = tmp;
4013     tmp = std::min(array[15], array[29]);
4014     array[29] = std::max(array[15], array[29]);
4015     array[15] = tmp;
4016     tmp = std::min(array[18], array[32]);
4017     array[32] = std::max(array[18], array[32]);
4018     array[18] = tmp;
4019     tmp = std::min(array[19], array[33]);
4020     array[33] = std::max(array[19], array[33]);
4021     array[19] = tmp;
4022     tmp = std::min(array[22], array[36]);
4023     array[36] = std::max(array[22], array[36]);
4024     array[22] = tmp;
4025     tmp = std::min(array[23], array[37]);
4026     array[37] = std::max(array[23], array[37]);
4027     array[23] = tmp;
4028     tmp = std::min(array[26], array[40]);
4029     array[40] = std::max(array[26], array[40]);
4030     array[26] = tmp;
4031     tmp = std::min(array[27], array[41]);
4032     array[41] = std::max(array[27], array[41]);
4033     array[27] = tmp;
4034     tmp = std::min(array[30], array[44]);
4035     array[44] = std::max(array[30], array[44]);
4036     array[30] = tmp;
4037     tmp = std::min(array[31], array[45]);
4038     array[45] = std::max(array[31], array[45]);
4039     array[31] = tmp;
4040     tmp = std::min(array[34], array[48]);
4041     array[48] = std::max(array[34], array[48]);
4042     array[34] = tmp;
4043     tmp = std::min(array[35], array[49]);
4044     array[49] = std::max(array[35], array[49]);
4045     array[35] = tmp;
4046     tmp = std::min(array[38], array[52]);
4047     array[52] = std::max(array[38], array[52]);
4048     array[38] = tmp;
4049     tmp = std::min(array[39], array[53]);
4050     array[53] = std::max(array[39], array[53]);
4051     array[39] = tmp;
4052     tmp = std::min(array[42], array[56]);
4053     array[56] = std::max(array[42], array[56]);
4054     array[42] = tmp;
4055     tmp = std::min(array[43], array[57]);
4056     array[57] = std::max(array[43], array[57]);
4057     array[43] = tmp;
4058     tmp = std::min(array[46], array[60]);
4059     array[60] = std::max(array[46], array[60]);
4060     array[46] = tmp;
4061     tmp = std::min(array[47], array[61]);
4062     array[61] = std::max(array[47], array[61]);
4063     array[47] = tmp;
4064     tmp = std::min(array[50], array[64]);
4065     array[64] = std::max(array[50], array[64]);
4066     array[50] = tmp;
4067     tmp = std::min(array[51], array[65]);
4068     array[65] = std::max(array[51], array[65]);
4069     array[51] = tmp;
4070     tmp = std::min(array[54], array[68]);
4071     array[68] = std::max(array[54], array[68]);
4072     array[54] = tmp;
4073     tmp = std::min(array[55], array[69]);
4074     array[69] = std::max(array[55], array[69]);
4075     array[55] = tmp;
4076     tmp = std::min(array[58], array[72]);
4077     array[72] = std::max(array[58], array[72]);
4078     array[58] = tmp;
4079     tmp = std::min(array[59], array[73]);
4080     array[73] = std::max(array[59], array[73]);
4081     array[59] = tmp;
4082     tmp = std::min(array[62], array[76]);
4083     array[76] = std::max(array[62], array[76]);
4084     array[62] = tmp;
4085     tmp = std::min(array[63], array[77]);
4086     array[77] = std::max(array[63], array[77]);
4087     array[63] = tmp;
4088     tmp = std::min(array[66], array[80]);
4089     array[80] = std::max(array[66], array[80]);
4090     array[66] = tmp;
4091     tmp = std::min(array[2], array[8]);
4092     array[8] = std::max(array[2], array[8]);
4093     array[2] = tmp;
4094     tmp = std::min(array[3], array[9]);
4095     array[9] = std::max(array[3], array[9]);
4096     array[3] = tmp;
4097     tmp = std::min(array[6], array[12]);
4098     array[12] = std::max(array[6], array[12]);
4099     array[6] = tmp;
4100     tmp = std::min(array[7], array[13]);
4101     array[13] = std::max(array[7], array[13]);
4102     array[7] = tmp;
4103     tmp = std::min(array[10], array[16]);
4104     array[16] = std::max(array[10], array[16]);
4105     array[10] = tmp;
4106     tmp = std::min(array[11], array[17]);
4107     array[17] = std::max(array[11], array[17]);
4108     array[11] = tmp;
4109     tmp = std::min(array[14], array[20]);
4110     array[20] = std::max(array[14], array[20]);
4111     array[14] = tmp;
4112     tmp = std::min(array[15], array[21]);
4113     array[21] = std::max(array[15], array[21]);
4114     array[15] = tmp;
4115     tmp = std::min(array[18], array[24]);
4116     array[24] = std::max(array[18], array[24]);
4117     array[18] = tmp;
4118     tmp = std::min(array[19], array[25]);
4119     array[25] = std::max(array[19], array[25]);
4120     array[19] = tmp;
4121     tmp = std::min(array[22], array[28]);
4122     array[28] = std::max(array[22], array[28]);
4123     array[22] = tmp;
4124     tmp = std::min(array[23], array[29]);
4125     array[29] = std::max(array[23], array[29]);
4126     array[23] = tmp;
4127     tmp = std::min(array[26], array[32]);
4128     array[32] = std::max(array[26], array[32]);
4129     array[26] = tmp;
4130     tmp = std::min(array[27], array[33]);
4131     array[33] = std::max(array[27], array[33]);
4132     array[27] = tmp;
4133     tmp = std::min(array[30], array[36]);
4134     array[36] = std::max(array[30], array[36]);
4135     array[30] = tmp;
4136     tmp = std::min(array[31], array[37]);
4137     array[37] = std::max(array[31], array[37]);
4138     array[31] = tmp;
4139     tmp = std::min(array[34], array[40]);
4140     array[40] = std::max(array[34], array[40]);
4141     array[34] = tmp;
4142     tmp = std::min(array[35], array[41]);
4143     array[41] = std::max(array[35], array[41]);
4144     array[35] = tmp;
4145     tmp = std::min(array[38], array[44]);
4146     array[44] = std::max(array[38], array[44]);
4147     array[38] = tmp;
4148     tmp = std::min(array[39], array[45]);
4149     array[45] = std::max(array[39], array[45]);
4150     array[39] = tmp;
4151     tmp = std::min(array[42], array[48]);
4152     array[48] = std::max(array[42], array[48]);
4153     array[42] = tmp;
4154     tmp = std::min(array[43], array[49]);
4155     array[49] = std::max(array[43], array[49]);
4156     array[43] = tmp;
4157     tmp = std::min(array[46], array[52]);
4158     array[52] = std::max(array[46], array[52]);
4159     array[46] = tmp;
4160     tmp = std::min(array[47], array[53]);
4161     array[53] = std::max(array[47], array[53]);
4162     array[47] = tmp;
4163     tmp = std::min(array[50], array[56]);
4164     array[56] = std::max(array[50], array[56]);
4165     array[50] = tmp;
4166     tmp = std::min(array[51], array[57]);
4167     array[57] = std::max(array[51], array[57]);
4168     array[51] = tmp;
4169     tmp = std::min(array[54], array[60]);
4170     array[60] = std::max(array[54], array[60]);
4171     array[54] = tmp;
4172     tmp = std::min(array[55], array[61]);
4173     array[61] = std::max(array[55], array[61]);
4174     array[55] = tmp;
4175     tmp = std::min(array[58], array[64]);
4176     array[64] = std::max(array[58], array[64]);
4177     array[58] = tmp;
4178     tmp = std::min(array[59], array[65]);
4179     array[65] = std::max(array[59], array[65]);
4180     array[59] = tmp;
4181     tmp = std::min(array[62], array[68]);
4182     array[68] = std::max(array[62], array[68]);
4183     array[62] = tmp;
4184     tmp = std::min(array[63], array[69]);
4185     array[69] = std::max(array[63], array[69]);
4186     array[63] = tmp;
4187     tmp = std::min(array[66], array[72]);
4188     array[72] = std::max(array[66], array[72]);
4189     array[66] = tmp;
4190     tmp = std::min(array[67], array[73]);
4191     array[73] = std::max(array[67], array[73]);
4192     array[67] = tmp;
4193     tmp = std::min(array[70], array[76]);
4194     array[76] = std::max(array[70], array[76]);
4195     array[70] = tmp;
4196     tmp = std::min(array[71], array[77]);
4197     array[77] = std::max(array[71], array[77]);
4198     array[71] = tmp;
4199     tmp = std::min(array[74], array[80]);
4200     array[80] = std::max(array[74], array[80]);
4201     array[74] = tmp;
4202     tmp = std::min(array[2], array[4]);
4203     array[4] = std::max(array[2], array[4]);
4204     array[2] = tmp;
4205     tmp = std::min(array[3], array[5]);
4206     array[5] = std::max(array[3], array[5]);
4207     array[3] = tmp;
4208     tmp = std::min(array[6], array[8]);
4209     array[8] = std::max(array[6], array[8]);
4210     array[6] = tmp;
4211     tmp = std::min(array[7], array[9]);
4212     array[9] = std::max(array[7], array[9]);
4213     array[7] = tmp;
4214     tmp = std::min(array[10], array[12]);
4215     array[12] = std::max(array[10], array[12]);
4216     array[10] = tmp;
4217     tmp = std::min(array[11], array[13]);
4218     array[13] = std::max(array[11], array[13]);
4219     array[11] = tmp;
4220     tmp = std::min(array[14], array[16]);
4221     array[16] = std::max(array[14], array[16]);
4222     array[14] = tmp;
4223     tmp = std::min(array[15], array[17]);
4224     array[17] = std::max(array[15], array[17]);
4225     array[15] = tmp;
4226     tmp = std::min(array[18], array[20]);
4227     array[20] = std::max(array[18], array[20]);
4228     array[18] = tmp;
4229     tmp = std::min(array[19], array[21]);
4230     array[21] = std::max(array[19], array[21]);
4231     array[19] = tmp;
4232     tmp = std::min(array[22], array[24]);
4233     array[24] = std::max(array[22], array[24]);
4234     array[22] = tmp;
4235     tmp = std::min(array[23], array[25]);
4236     array[25] = std::max(array[23], array[25]);
4237     array[23] = tmp;
4238     tmp = std::min(array[26], array[28]);
4239     array[28] = std::max(array[26], array[28]);
4240     array[26] = tmp;
4241     tmp = std::min(array[27], array[29]);
4242     array[29] = std::max(array[27], array[29]);
4243     array[27] = tmp;
4244     tmp = std::min(array[30], array[32]);
4245     array[32] = std::max(array[30], array[32]);
4246     array[30] = tmp;
4247     tmp = std::min(array[31], array[33]);
4248     array[33] = std::max(array[31], array[33]);
4249     array[31] = tmp;
4250     tmp = std::min(array[34], array[36]);
4251     array[36] = std::max(array[34], array[36]);
4252     array[34] = tmp;
4253     tmp = std::min(array[35], array[37]);
4254     array[37] = std::max(array[35], array[37]);
4255     array[35] = tmp;
4256     tmp = std::min(array[38], array[40]);
4257     array[40] = std::max(array[38], array[40]);
4258     array[38] = tmp;
4259     tmp = std::min(array[39], array[41]);
4260     array[41] = std::max(array[39], array[41]);
4261     array[39] = tmp;
4262     tmp = std::min(array[42], array[44]);
4263     array[44] = std::max(array[42], array[44]);
4264     array[42] = tmp;
4265     tmp = std::min(array[43], array[45]);
4266     array[45] = std::max(array[43], array[45]);
4267     array[43] = tmp;
4268     tmp = std::min(array[46], array[48]);
4269     array[48] = std::max(array[46], array[48]);
4270     array[46] = tmp;
4271     tmp = std::min(array[47], array[49]);
4272     array[49] = std::max(array[47], array[49]);
4273     array[47] = tmp;
4274     tmp = std::min(array[50], array[52]);
4275     array[52] = std::max(array[50], array[52]);
4276     array[50] = tmp;
4277     tmp = std::min(array[51], array[53]);
4278     array[53] = std::max(array[51], array[53]);
4279     array[51] = tmp;
4280     tmp = std::min(array[54], array[56]);
4281     array[56] = std::max(array[54], array[56]);
4282     array[54] = tmp;
4283     tmp = std::min(array[55], array[57]);
4284     array[57] = std::max(array[55], array[57]);
4285     array[55] = tmp;
4286     tmp = std::min(array[58], array[60]);
4287     array[60] = std::max(array[58], array[60]);
4288     array[58] = tmp;
4289     tmp = std::min(array[59], array[61]);
4290     array[61] = std::max(array[59], array[61]);
4291     array[59] = tmp;
4292     tmp = std::min(array[62], array[64]);
4293     array[64] = std::max(array[62], array[64]);
4294     array[62] = tmp;
4295     tmp = std::min(array[63], array[65]);
4296     array[65] = std::max(array[63], array[65]);
4297     array[63] = tmp;
4298     tmp = std::min(array[66], array[68]);
4299     array[68] = std::max(array[66], array[68]);
4300     array[66] = tmp;
4301     tmp = std::min(array[67], array[69]);
4302     array[69] = std::max(array[67], array[69]);
4303     array[67] = tmp;
4304     tmp = std::min(array[70], array[72]);
4305     array[72] = std::max(array[70], array[72]);
4306     array[70] = tmp;
4307     tmp = std::min(array[71], array[73]);
4308     array[73] = std::max(array[71], array[73]);
4309     array[71] = tmp;
4310     tmp = std::min(array[74], array[76]);
4311     array[76] = std::max(array[74], array[76]);
4312     array[74] = tmp;
4313     tmp = std::min(array[75], array[77]);
4314     array[77] = std::max(array[75], array[77]);
4315     array[75] = tmp;
4316     tmp = std::min(array[78], array[80]);
4317     array[80] = std::max(array[78], array[80]);
4318     array[78] = tmp;
4319     array[1] = std::max(array[0], array[1]);
4320     array[3] = std::max(array[2], array[3]);
4321     array[5] = std::max(array[4], array[5]);
4322     array[7] = std::max(array[6], array[7]);
4323     array[9] = std::max(array[8], array[9]);
4324     array[11] = std::max(array[10], array[11]);
4325     array[13] = std::max(array[12], array[13]);
4326     array[15] = std::max(array[14], array[15]);
4327     array[17] = std::max(array[16], array[17]);
4328     array[19] = std::max(array[18], array[19]);
4329     array[21] = std::max(array[20], array[21]);
4330     array[23] = std::max(array[22], array[23]);
4331     array[25] = std::max(array[24], array[25]);
4332     array[27] = std::max(array[26], array[27]);
4333     array[29] = std::max(array[28], array[29]);
4334     array[31] = std::max(array[30], array[31]);
4335     array[33] = std::max(array[32], array[33]);
4336     array[35] = std::max(array[34], array[35]);
4337     array[37] = std::max(array[36], array[37]);
4338     array[39] = std::max(array[38], array[39]);
4339     array[40] = std::min(array[40], array[41]);
4340     array[42] = std::min(array[42], array[43]);
4341     array[44] = std::min(array[44], array[45]);
4342     array[46] = std::min(array[46], array[47]);
4343     array[48] = std::min(array[48], array[49]);
4344     array[50] = std::min(array[50], array[51]);
4345     array[52] = std::min(array[52], array[53]);
4346     array[54] = std::min(array[54], array[55]);
4347     array[56] = std::min(array[56], array[57]);
4348     array[58] = std::min(array[58], array[59]);
4349     array[60] = std::min(array[60], array[61]);
4350     array[62] = std::min(array[62], array[63]);
4351     array[64] = std::min(array[64], array[65]);
4352     array[66] = std::min(array[66], array[67]);
4353     array[68] = std::min(array[68], array[69]);
4354     array[70] = std::min(array[70], array[71]);
4355     array[72] = std::min(array[72], array[73]);
4356     array[74] = std::min(array[74], array[75]);
4357     array[76] = std::min(array[76], array[77]);
4358     array[78] = std::min(array[78], array[79]);
4359     array[64] = std::max(array[1], array[64]);
4360     array[66] = std::max(array[3], array[66]);
4361     array[68] = std::max(array[5], array[68]);
4362     array[70] = std::max(array[7], array[70]);
4363     array[9] = std::min(array[9], array[72]);
4364     array[11] = std::min(array[11], array[74]);
4365     array[13] = std::min(array[13], array[76]);
4366     array[15] = std::min(array[15], array[78]);
4367     array[17] = std::min(array[17], array[80]);
4368     array[40] = std::max(array[9], array[40]);
4369     array[42] = std::max(array[11], array[42]);
4370     array[44] = std::max(array[13], array[44]);
4371     array[46] = std::max(array[15], array[46]);
4372     array[48] = std::max(array[17], array[48]);
4373     array[50] = std::max(array[19], array[50]);
4374     array[52] = std::max(array[21], array[52]);
4375     array[54] = std::max(array[23], array[54]);
4376     array[25] = std::min(array[25], array[56]);
4377     array[27] = std::min(array[27], array[58]);
4378     array[29] = std::min(array[29], array[60]);
4379     array[31] = std::min(array[31], array[62]);
4380     array[33] = std::min(array[33], array[64]);
4381     array[35] = std::min(array[35], array[66]);
4382     array[37] = std::min(array[37], array[68]);
4383     array[39] = std::min(array[39], array[70]);
4384     array[40] = std::max(array[25], array[40]);
4385     array[42] = std::max(array[27], array[42]);
4386     array[44] = std::max(array[29], array[44]);
4387     array[46] = std::max(array[31], array[46]);
4388     array[33] = std::min(array[33], array[48]);
4389     array[35] = std::min(array[35], array[50]);
4390     array[37] = std::min(array[37], array[52]);
4391     array[39] = std::min(array[39], array[54]);
4392     array[40] = std::max(array[33], array[40]);
4393     array[42] = std::max(array[35], array[42]);
4394     array[37] = std::min(array[37], array[44]);
4395     array[39] = std::min(array[39], array[46]);
4396     array[40] = std::max(array[37], array[40]);
4397     array[39] = std::min(array[39], array[42]);
4398     return std::max(array[39], array[40]);
4399 }
4400 
4401 #ifdef __SSE2__
4402 template<>
median(std::array<vfloat,81> array)4403 inline vfloat median(std::array<vfloat, 81> array)
4404 {
4405     vfloat tmp = vminf(array[0], array[64]);
4406     array[64] = vmaxf(array[0], array[64]);
4407     array[0] = tmp;
4408     tmp = vminf(array[1], array[65]);
4409     array[65] = vmaxf(array[1], array[65]);
4410     array[1] = tmp;
4411     tmp = vminf(array[2], array[66]);
4412     array[66] = vmaxf(array[2], array[66]);
4413     array[2] = tmp;
4414     tmp = vminf(array[3], array[67]);
4415     array[67] = vmaxf(array[3], array[67]);
4416     array[3] = tmp;
4417     tmp = vminf(array[4], array[68]);
4418     array[68] = vmaxf(array[4], array[68]);
4419     array[4] = tmp;
4420     tmp = vminf(array[5], array[69]);
4421     array[69] = vmaxf(array[5], array[69]);
4422     array[5] = tmp;
4423     tmp = vminf(array[6], array[70]);
4424     array[70] = vmaxf(array[6], array[70]);
4425     array[6] = tmp;
4426     tmp = vminf(array[7], array[71]);
4427     array[71] = vmaxf(array[7], array[71]);
4428     array[7] = tmp;
4429     tmp = vminf(array[8], array[72]);
4430     array[72] = vmaxf(array[8], array[72]);
4431     array[8] = tmp;
4432     tmp = vminf(array[9], array[73]);
4433     array[73] = vmaxf(array[9], array[73]);
4434     array[9] = tmp;
4435     tmp = vminf(array[10], array[74]);
4436     array[74] = vmaxf(array[10], array[74]);
4437     array[10] = tmp;
4438     tmp = vminf(array[11], array[75]);
4439     array[75] = vmaxf(array[11], array[75]);
4440     array[11] = tmp;
4441     tmp = vminf(array[12], array[76]);
4442     array[76] = vmaxf(array[12], array[76]);
4443     array[12] = tmp;
4444     tmp = vminf(array[13], array[77]);
4445     array[77] = vmaxf(array[13], array[77]);
4446     array[13] = tmp;
4447     tmp = vminf(array[14], array[78]);
4448     array[78] = vmaxf(array[14], array[78]);
4449     array[14] = tmp;
4450     tmp = vminf(array[15], array[79]);
4451     array[79] = vmaxf(array[15], array[79]);
4452     array[15] = tmp;
4453     tmp = vminf(array[16], array[80]);
4454     array[80] = vmaxf(array[16], array[80]);
4455     array[16] = tmp;
4456     tmp = vminf(array[0], array[32]);
4457     array[32] = vmaxf(array[0], array[32]);
4458     array[0] = tmp;
4459     tmp = vminf(array[1], array[33]);
4460     array[33] = vmaxf(array[1], array[33]);
4461     array[1] = tmp;
4462     tmp = vminf(array[2], array[34]);
4463     array[34] = vmaxf(array[2], array[34]);
4464     array[2] = tmp;
4465     tmp = vminf(array[3], array[35]);
4466     array[35] = vmaxf(array[3], array[35]);
4467     array[3] = tmp;
4468     tmp = vminf(array[4], array[36]);
4469     array[36] = vmaxf(array[4], array[36]);
4470     array[4] = tmp;
4471     tmp = vminf(array[5], array[37]);
4472     array[37] = vmaxf(array[5], array[37]);
4473     array[5] = tmp;
4474     tmp = vminf(array[6], array[38]);
4475     array[38] = vmaxf(array[6], array[38]);
4476     array[6] = tmp;
4477     tmp = vminf(array[7], array[39]);
4478     array[39] = vmaxf(array[7], array[39]);
4479     array[7] = tmp;
4480     tmp = vminf(array[8], array[40]);
4481     array[40] = vmaxf(array[8], array[40]);
4482     array[8] = tmp;
4483     tmp = vminf(array[9], array[41]);
4484     array[41] = vmaxf(array[9], array[41]);
4485     array[9] = tmp;
4486     tmp = vminf(array[10], array[42]);
4487     array[42] = vmaxf(array[10], array[42]);
4488     array[10] = tmp;
4489     tmp = vminf(array[11], array[43]);
4490     array[43] = vmaxf(array[11], array[43]);
4491     array[11] = tmp;
4492     tmp = vminf(array[12], array[44]);
4493     array[44] = vmaxf(array[12], array[44]);
4494     array[12] = tmp;
4495     tmp = vminf(array[13], array[45]);
4496     array[45] = vmaxf(array[13], array[45]);
4497     array[13] = tmp;
4498     tmp = vminf(array[14], array[46]);
4499     array[46] = vmaxf(array[14], array[46]);
4500     array[14] = tmp;
4501     tmp = vminf(array[15], array[47]);
4502     array[47] = vmaxf(array[15], array[47]);
4503     array[15] = tmp;
4504     tmp = vminf(array[16], array[48]);
4505     array[48] = vmaxf(array[16], array[48]);
4506     array[16] = tmp;
4507     tmp = vminf(array[17], array[49]);
4508     array[49] = vmaxf(array[17], array[49]);
4509     array[17] = tmp;
4510     tmp = vminf(array[18], array[50]);
4511     array[50] = vmaxf(array[18], array[50]);
4512     array[18] = tmp;
4513     tmp = vminf(array[19], array[51]);
4514     array[51] = vmaxf(array[19], array[51]);
4515     array[19] = tmp;
4516     tmp = vminf(array[20], array[52]);
4517     array[52] = vmaxf(array[20], array[52]);
4518     array[20] = tmp;
4519     tmp = vminf(array[21], array[53]);
4520     array[53] = vmaxf(array[21], array[53]);
4521     array[21] = tmp;
4522     tmp = vminf(array[22], array[54]);
4523     array[54] = vmaxf(array[22], array[54]);
4524     array[22] = tmp;
4525     tmp = vminf(array[23], array[55]);
4526     array[55] = vmaxf(array[23], array[55]);
4527     array[23] = tmp;
4528     tmp = vminf(array[24], array[56]);
4529     array[56] = vmaxf(array[24], array[56]);
4530     array[24] = tmp;
4531     tmp = vminf(array[25], array[57]);
4532     array[57] = vmaxf(array[25], array[57]);
4533     array[25] = tmp;
4534     tmp = vminf(array[26], array[58]);
4535     array[58] = vmaxf(array[26], array[58]);
4536     array[26] = tmp;
4537     tmp = vminf(array[27], array[59]);
4538     array[59] = vmaxf(array[27], array[59]);
4539     array[27] = tmp;
4540     tmp = vminf(array[28], array[60]);
4541     array[60] = vmaxf(array[28], array[60]);
4542     array[28] = tmp;
4543     tmp = vminf(array[29], array[61]);
4544     array[61] = vmaxf(array[29], array[61]);
4545     array[29] = tmp;
4546     tmp = vminf(array[30], array[62]);
4547     array[62] = vmaxf(array[30], array[62]);
4548     array[30] = tmp;
4549     tmp = vminf(array[31], array[63]);
4550     array[63] = vmaxf(array[31], array[63]);
4551     array[31] = tmp;
4552     tmp = vminf(array[32], array[64]);
4553     array[64] = vmaxf(array[32], array[64]);
4554     array[32] = tmp;
4555     tmp = vminf(array[33], array[65]);
4556     array[65] = vmaxf(array[33], array[65]);
4557     array[33] = tmp;
4558     tmp = vminf(array[34], array[66]);
4559     array[66] = vmaxf(array[34], array[66]);
4560     array[34] = tmp;
4561     tmp = vminf(array[35], array[67]);
4562     array[67] = vmaxf(array[35], array[67]);
4563     array[35] = tmp;
4564     tmp = vminf(array[36], array[68]);
4565     array[68] = vmaxf(array[36], array[68]);
4566     array[36] = tmp;
4567     tmp = vminf(array[37], array[69]);
4568     array[69] = vmaxf(array[37], array[69]);
4569     array[37] = tmp;
4570     tmp = vminf(array[38], array[70]);
4571     array[70] = vmaxf(array[38], array[70]);
4572     array[38] = tmp;
4573     tmp = vminf(array[39], array[71]);
4574     array[71] = vmaxf(array[39], array[71]);
4575     array[39] = tmp;
4576     tmp = vminf(array[40], array[72]);
4577     array[72] = vmaxf(array[40], array[72]);
4578     array[40] = tmp;
4579     tmp = vminf(array[41], array[73]);
4580     array[73] = vmaxf(array[41], array[73]);
4581     array[41] = tmp;
4582     tmp = vminf(array[42], array[74]);
4583     array[74] = vmaxf(array[42], array[74]);
4584     array[42] = tmp;
4585     tmp = vminf(array[43], array[75]);
4586     array[75] = vmaxf(array[43], array[75]);
4587     array[43] = tmp;
4588     tmp = vminf(array[44], array[76]);
4589     array[76] = vmaxf(array[44], array[76]);
4590     array[44] = tmp;
4591     tmp = vminf(array[45], array[77]);
4592     array[77] = vmaxf(array[45], array[77]);
4593     array[45] = tmp;
4594     tmp = vminf(array[46], array[78]);
4595     array[78] = vmaxf(array[46], array[78]);
4596     array[46] = tmp;
4597     tmp = vminf(array[47], array[79]);
4598     array[79] = vmaxf(array[47], array[79]);
4599     array[47] = tmp;
4600     tmp = vminf(array[48], array[80]);
4601     array[80] = vmaxf(array[48], array[80]);
4602     array[48] = tmp;
4603     tmp = vminf(array[0], array[16]);
4604     array[16] = vmaxf(array[0], array[16]);
4605     array[0] = tmp;
4606     tmp = vminf(array[1], array[17]);
4607     array[17] = vmaxf(array[1], array[17]);
4608     array[1] = tmp;
4609     tmp = vminf(array[2], array[18]);
4610     array[18] = vmaxf(array[2], array[18]);
4611     array[2] = tmp;
4612     tmp = vminf(array[3], array[19]);
4613     array[19] = vmaxf(array[3], array[19]);
4614     array[3] = tmp;
4615     tmp = vminf(array[4], array[20]);
4616     array[20] = vmaxf(array[4], array[20]);
4617     array[4] = tmp;
4618     tmp = vminf(array[5], array[21]);
4619     array[21] = vmaxf(array[5], array[21]);
4620     array[5] = tmp;
4621     tmp = vminf(array[6], array[22]);
4622     array[22] = vmaxf(array[6], array[22]);
4623     array[6] = tmp;
4624     tmp = vminf(array[7], array[23]);
4625     array[23] = vmaxf(array[7], array[23]);
4626     array[7] = tmp;
4627     tmp = vminf(array[8], array[24]);
4628     array[24] = vmaxf(array[8], array[24]);
4629     array[8] = tmp;
4630     tmp = vminf(array[9], array[25]);
4631     array[25] = vmaxf(array[9], array[25]);
4632     array[9] = tmp;
4633     tmp = vminf(array[10], array[26]);
4634     array[26] = vmaxf(array[10], array[26]);
4635     array[10] = tmp;
4636     tmp = vminf(array[11], array[27]);
4637     array[27] = vmaxf(array[11], array[27]);
4638     array[11] = tmp;
4639     tmp = vminf(array[12], array[28]);
4640     array[28] = vmaxf(array[12], array[28]);
4641     array[12] = tmp;
4642     tmp = vminf(array[13], array[29]);
4643     array[29] = vmaxf(array[13], array[29]);
4644     array[13] = tmp;
4645     tmp = vminf(array[14], array[30]);
4646     array[30] = vmaxf(array[14], array[30]);
4647     array[14] = tmp;
4648     tmp = vminf(array[15], array[31]);
4649     array[31] = vmaxf(array[15], array[31]);
4650     array[15] = tmp;
4651     tmp = vminf(array[32], array[48]);
4652     array[48] = vmaxf(array[32], array[48]);
4653     array[32] = tmp;
4654     tmp = vminf(array[33], array[49]);
4655     array[49] = vmaxf(array[33], array[49]);
4656     array[33] = tmp;
4657     tmp = vminf(array[34], array[50]);
4658     array[50] = vmaxf(array[34], array[50]);
4659     array[34] = tmp;
4660     tmp = vminf(array[35], array[51]);
4661     array[51] = vmaxf(array[35], array[51]);
4662     array[35] = tmp;
4663     tmp = vminf(array[36], array[52]);
4664     array[52] = vmaxf(array[36], array[52]);
4665     array[36] = tmp;
4666     tmp = vminf(array[37], array[53]);
4667     array[53] = vmaxf(array[37], array[53]);
4668     array[37] = tmp;
4669     tmp = vminf(array[38], array[54]);
4670     array[54] = vmaxf(array[38], array[54]);
4671     array[38] = tmp;
4672     tmp = vminf(array[39], array[55]);
4673     array[55] = vmaxf(array[39], array[55]);
4674     array[39] = tmp;
4675     tmp = vminf(array[40], array[56]);
4676     array[56] = vmaxf(array[40], array[56]);
4677     array[40] = tmp;
4678     tmp = vminf(array[41], array[57]);
4679     array[57] = vmaxf(array[41], array[57]);
4680     array[41] = tmp;
4681     tmp = vminf(array[42], array[58]);
4682     array[58] = vmaxf(array[42], array[58]);
4683     array[42] = tmp;
4684     tmp = vminf(array[43], array[59]);
4685     array[59] = vmaxf(array[43], array[59]);
4686     array[43] = tmp;
4687     tmp = vminf(array[44], array[60]);
4688     array[60] = vmaxf(array[44], array[60]);
4689     array[44] = tmp;
4690     tmp = vminf(array[45], array[61]);
4691     array[61] = vmaxf(array[45], array[61]);
4692     array[45] = tmp;
4693     tmp = vminf(array[46], array[62]);
4694     array[62] = vmaxf(array[46], array[62]);
4695     array[46] = tmp;
4696     tmp = vminf(array[47], array[63]);
4697     array[63] = vmaxf(array[47], array[63]);
4698     array[47] = tmp;
4699     tmp = vminf(array[64], array[80]);
4700     array[80] = vmaxf(array[64], array[80]);
4701     array[64] = tmp;
4702     tmp = vminf(array[16], array[64]);
4703     array[64] = vmaxf(array[16], array[64]);
4704     array[16] = tmp;
4705     tmp = vminf(array[17], array[65]);
4706     array[65] = vmaxf(array[17], array[65]);
4707     array[17] = tmp;
4708     tmp = vminf(array[18], array[66]);
4709     array[66] = vmaxf(array[18], array[66]);
4710     array[18] = tmp;
4711     tmp = vminf(array[19], array[67]);
4712     array[67] = vmaxf(array[19], array[67]);
4713     array[19] = tmp;
4714     tmp = vminf(array[20], array[68]);
4715     array[68] = vmaxf(array[20], array[68]);
4716     array[20] = tmp;
4717     tmp = vminf(array[21], array[69]);
4718     array[69] = vmaxf(array[21], array[69]);
4719     array[21] = tmp;
4720     tmp = vminf(array[22], array[70]);
4721     array[70] = vmaxf(array[22], array[70]);
4722     array[22] = tmp;
4723     tmp = vminf(array[23], array[71]);
4724     array[71] = vmaxf(array[23], array[71]);
4725     array[23] = tmp;
4726     tmp = vminf(array[24], array[72]);
4727     array[72] = vmaxf(array[24], array[72]);
4728     array[24] = tmp;
4729     tmp = vminf(array[25], array[73]);
4730     array[73] = vmaxf(array[25], array[73]);
4731     array[25] = tmp;
4732     tmp = vminf(array[26], array[74]);
4733     array[74] = vmaxf(array[26], array[74]);
4734     array[26] = tmp;
4735     tmp = vminf(array[27], array[75]);
4736     array[75] = vmaxf(array[27], array[75]);
4737     array[27] = tmp;
4738     tmp = vminf(array[28], array[76]);
4739     array[76] = vmaxf(array[28], array[76]);
4740     array[28] = tmp;
4741     tmp = vminf(array[29], array[77]);
4742     array[77] = vmaxf(array[29], array[77]);
4743     array[29] = tmp;
4744     tmp = vminf(array[30], array[78]);
4745     array[78] = vmaxf(array[30], array[78]);
4746     array[30] = tmp;
4747     tmp = vminf(array[31], array[79]);
4748     array[79] = vmaxf(array[31], array[79]);
4749     array[31] = tmp;
4750     tmp = vminf(array[16], array[32]);
4751     array[32] = vmaxf(array[16], array[32]);
4752     array[16] = tmp;
4753     tmp = vminf(array[17], array[33]);
4754     array[33] = vmaxf(array[17], array[33]);
4755     array[17] = tmp;
4756     tmp = vminf(array[18], array[34]);
4757     array[34] = vmaxf(array[18], array[34]);
4758     array[18] = tmp;
4759     tmp = vminf(array[19], array[35]);
4760     array[35] = vmaxf(array[19], array[35]);
4761     array[19] = tmp;
4762     tmp = vminf(array[20], array[36]);
4763     array[36] = vmaxf(array[20], array[36]);
4764     array[20] = tmp;
4765     tmp = vminf(array[21], array[37]);
4766     array[37] = vmaxf(array[21], array[37]);
4767     array[21] = tmp;
4768     tmp = vminf(array[22], array[38]);
4769     array[38] = vmaxf(array[22], array[38]);
4770     array[22] = tmp;
4771     tmp = vminf(array[23], array[39]);
4772     array[39] = vmaxf(array[23], array[39]);
4773     array[23] = tmp;
4774     tmp = vminf(array[24], array[40]);
4775     array[40] = vmaxf(array[24], array[40]);
4776     array[24] = tmp;
4777     tmp = vminf(array[25], array[41]);
4778     array[41] = vmaxf(array[25], array[41]);
4779     array[25] = tmp;
4780     tmp = vminf(array[26], array[42]);
4781     array[42] = vmaxf(array[26], array[42]);
4782     array[26] = tmp;
4783     tmp = vminf(array[27], array[43]);
4784     array[43] = vmaxf(array[27], array[43]);
4785     array[27] = tmp;
4786     tmp = vminf(array[28], array[44]);
4787     array[44] = vmaxf(array[28], array[44]);
4788     array[28] = tmp;
4789     tmp = vminf(array[29], array[45]);
4790     array[45] = vmaxf(array[29], array[45]);
4791     array[29] = tmp;
4792     tmp = vminf(array[30], array[46]);
4793     array[46] = vmaxf(array[30], array[46]);
4794     array[30] = tmp;
4795     tmp = vminf(array[31], array[47]);
4796     array[47] = vmaxf(array[31], array[47]);
4797     array[31] = tmp;
4798     tmp = vminf(array[48], array[64]);
4799     array[64] = vmaxf(array[48], array[64]);
4800     array[48] = tmp;
4801     tmp = vminf(array[49], array[65]);
4802     array[65] = vmaxf(array[49], array[65]);
4803     array[49] = tmp;
4804     tmp = vminf(array[50], array[66]);
4805     array[66] = vmaxf(array[50], array[66]);
4806     array[50] = tmp;
4807     tmp = vminf(array[51], array[67]);
4808     array[67] = vmaxf(array[51], array[67]);
4809     array[51] = tmp;
4810     tmp = vminf(array[52], array[68]);
4811     array[68] = vmaxf(array[52], array[68]);
4812     array[52] = tmp;
4813     tmp = vminf(array[53], array[69]);
4814     array[69] = vmaxf(array[53], array[69]);
4815     array[53] = tmp;
4816     tmp = vminf(array[54], array[70]);
4817     array[70] = vmaxf(array[54], array[70]);
4818     array[54] = tmp;
4819     tmp = vminf(array[55], array[71]);
4820     array[71] = vmaxf(array[55], array[71]);
4821     array[55] = tmp;
4822     tmp = vminf(array[56], array[72]);
4823     array[72] = vmaxf(array[56], array[72]);
4824     array[56] = tmp;
4825     tmp = vminf(array[57], array[73]);
4826     array[73] = vmaxf(array[57], array[73]);
4827     array[57] = tmp;
4828     tmp = vminf(array[58], array[74]);
4829     array[74] = vmaxf(array[58], array[74]);
4830     array[58] = tmp;
4831     tmp = vminf(array[59], array[75]);
4832     array[75] = vmaxf(array[59], array[75]);
4833     array[59] = tmp;
4834     tmp = vminf(array[60], array[76]);
4835     array[76] = vmaxf(array[60], array[76]);
4836     array[60] = tmp;
4837     tmp = vminf(array[61], array[77]);
4838     array[77] = vmaxf(array[61], array[77]);
4839     array[61] = tmp;
4840     tmp = vminf(array[62], array[78]);
4841     array[78] = vmaxf(array[62], array[78]);
4842     array[62] = tmp;
4843     tmp = vminf(array[63], array[79]);
4844     array[79] = vmaxf(array[63], array[79]);
4845     array[63] = tmp;
4846     tmp = vminf(array[0], array[8]);
4847     array[8] = vmaxf(array[0], array[8]);
4848     array[0] = tmp;
4849     tmp = vminf(array[1], array[9]);
4850     array[9] = vmaxf(array[1], array[9]);
4851     array[1] = tmp;
4852     tmp = vminf(array[2], array[10]);
4853     array[10] = vmaxf(array[2], array[10]);
4854     array[2] = tmp;
4855     tmp = vminf(array[3], array[11]);
4856     array[11] = vmaxf(array[3], array[11]);
4857     array[3] = tmp;
4858     tmp = vminf(array[4], array[12]);
4859     array[12] = vmaxf(array[4], array[12]);
4860     array[4] = tmp;
4861     tmp = vminf(array[5], array[13]);
4862     array[13] = vmaxf(array[5], array[13]);
4863     array[5] = tmp;
4864     tmp = vminf(array[6], array[14]);
4865     array[14] = vmaxf(array[6], array[14]);
4866     array[6] = tmp;
4867     tmp = vminf(array[7], array[15]);
4868     array[15] = vmaxf(array[7], array[15]);
4869     array[7] = tmp;
4870     tmp = vminf(array[16], array[24]);
4871     array[24] = vmaxf(array[16], array[24]);
4872     array[16] = tmp;
4873     tmp = vminf(array[17], array[25]);
4874     array[25] = vmaxf(array[17], array[25]);
4875     array[17] = tmp;
4876     tmp = vminf(array[18], array[26]);
4877     array[26] = vmaxf(array[18], array[26]);
4878     array[18] = tmp;
4879     tmp = vminf(array[19], array[27]);
4880     array[27] = vmaxf(array[19], array[27]);
4881     array[19] = tmp;
4882     tmp = vminf(array[20], array[28]);
4883     array[28] = vmaxf(array[20], array[28]);
4884     array[20] = tmp;
4885     tmp = vminf(array[21], array[29]);
4886     array[29] = vmaxf(array[21], array[29]);
4887     array[21] = tmp;
4888     tmp = vminf(array[22], array[30]);
4889     array[30] = vmaxf(array[22], array[30]);
4890     array[22] = tmp;
4891     tmp = vminf(array[23], array[31]);
4892     array[31] = vmaxf(array[23], array[31]);
4893     array[23] = tmp;
4894     tmp = vminf(array[32], array[40]);
4895     array[40] = vmaxf(array[32], array[40]);
4896     array[32] = tmp;
4897     tmp = vminf(array[33], array[41]);
4898     array[41] = vmaxf(array[33], array[41]);
4899     array[33] = tmp;
4900     tmp = vminf(array[34], array[42]);
4901     array[42] = vmaxf(array[34], array[42]);
4902     array[34] = tmp;
4903     tmp = vminf(array[35], array[43]);
4904     array[43] = vmaxf(array[35], array[43]);
4905     array[35] = tmp;
4906     tmp = vminf(array[36], array[44]);
4907     array[44] = vmaxf(array[36], array[44]);
4908     array[36] = tmp;
4909     tmp = vminf(array[37], array[45]);
4910     array[45] = vmaxf(array[37], array[45]);
4911     array[37] = tmp;
4912     tmp = vminf(array[38], array[46]);
4913     array[46] = vmaxf(array[38], array[46]);
4914     array[38] = tmp;
4915     tmp = vminf(array[39], array[47]);
4916     array[47] = vmaxf(array[39], array[47]);
4917     array[39] = tmp;
4918     tmp = vminf(array[48], array[56]);
4919     array[56] = vmaxf(array[48], array[56]);
4920     array[48] = tmp;
4921     tmp = vminf(array[49], array[57]);
4922     array[57] = vmaxf(array[49], array[57]);
4923     array[49] = tmp;
4924     tmp = vminf(array[50], array[58]);
4925     array[58] = vmaxf(array[50], array[58]);
4926     array[50] = tmp;
4927     tmp = vminf(array[51], array[59]);
4928     array[59] = vmaxf(array[51], array[59]);
4929     array[51] = tmp;
4930     tmp = vminf(array[52], array[60]);
4931     array[60] = vmaxf(array[52], array[60]);
4932     array[52] = tmp;
4933     tmp = vminf(array[53], array[61]);
4934     array[61] = vmaxf(array[53], array[61]);
4935     array[53] = tmp;
4936     tmp = vminf(array[54], array[62]);
4937     array[62] = vmaxf(array[54], array[62]);
4938     array[54] = tmp;
4939     tmp = vminf(array[55], array[63]);
4940     array[63] = vmaxf(array[55], array[63]);
4941     array[55] = tmp;
4942     tmp = vminf(array[64], array[72]);
4943     array[72] = vmaxf(array[64], array[72]);
4944     array[64] = tmp;
4945     tmp = vminf(array[65], array[73]);
4946     array[73] = vmaxf(array[65], array[73]);
4947     array[65] = tmp;
4948     tmp = vminf(array[66], array[74]);
4949     array[74] = vmaxf(array[66], array[74]);
4950     array[66] = tmp;
4951     tmp = vminf(array[67], array[75]);
4952     array[75] = vmaxf(array[67], array[75]);
4953     array[67] = tmp;
4954     tmp = vminf(array[68], array[76]);
4955     array[76] = vmaxf(array[68], array[76]);
4956     array[68] = tmp;
4957     tmp = vminf(array[69], array[77]);
4958     array[77] = vmaxf(array[69], array[77]);
4959     array[69] = tmp;
4960     tmp = vminf(array[70], array[78]);
4961     array[78] = vmaxf(array[70], array[78]);
4962     array[70] = tmp;
4963     tmp = vminf(array[71], array[79]);
4964     array[79] = vmaxf(array[71], array[79]);
4965     array[71] = tmp;
4966     tmp = vminf(array[8], array[64]);
4967     array[64] = vmaxf(array[8], array[64]);
4968     array[8] = tmp;
4969     tmp = vminf(array[9], array[65]);
4970     array[65] = vmaxf(array[9], array[65]);
4971     array[9] = tmp;
4972     tmp = vminf(array[10], array[66]);
4973     array[66] = vmaxf(array[10], array[66]);
4974     array[10] = tmp;
4975     tmp = vminf(array[11], array[67]);
4976     array[67] = vmaxf(array[11], array[67]);
4977     array[11] = tmp;
4978     tmp = vminf(array[12], array[68]);
4979     array[68] = vmaxf(array[12], array[68]);
4980     array[12] = tmp;
4981     tmp = vminf(array[13], array[69]);
4982     array[69] = vmaxf(array[13], array[69]);
4983     array[13] = tmp;
4984     tmp = vminf(array[14], array[70]);
4985     array[70] = vmaxf(array[14], array[70]);
4986     array[14] = tmp;
4987     tmp = vminf(array[15], array[71]);
4988     array[71] = vmaxf(array[15], array[71]);
4989     array[15] = tmp;
4990     tmp = vminf(array[24], array[80]);
4991     array[80] = vmaxf(array[24], array[80]);
4992     array[24] = tmp;
4993     tmp = vminf(array[8], array[32]);
4994     array[32] = vmaxf(array[8], array[32]);
4995     array[8] = tmp;
4996     tmp = vminf(array[9], array[33]);
4997     array[33] = vmaxf(array[9], array[33]);
4998     array[9] = tmp;
4999     tmp = vminf(array[10], array[34]);
5000     array[34] = vmaxf(array[10], array[34]);
5001     array[10] = tmp;
5002     tmp = vminf(array[11], array[35]);
5003     array[35] = vmaxf(array[11], array[35]);
5004     array[11] = tmp;
5005     tmp = vminf(array[12], array[36]);
5006     array[36] = vmaxf(array[12], array[36]);
5007     array[12] = tmp;
5008     tmp = vminf(array[13], array[37]);
5009     array[37] = vmaxf(array[13], array[37]);
5010     array[13] = tmp;
5011     tmp = vminf(array[14], array[38]);
5012     array[38] = vmaxf(array[14], array[38]);
5013     array[14] = tmp;
5014     tmp = vminf(array[15], array[39]);
5015     array[39] = vmaxf(array[15], array[39]);
5016     array[15] = tmp;
5017     tmp = vminf(array[24], array[48]);
5018     array[48] = vmaxf(array[24], array[48]);
5019     array[24] = tmp;
5020     tmp = vminf(array[25], array[49]);
5021     array[49] = vmaxf(array[25], array[49]);
5022     array[25] = tmp;
5023     tmp = vminf(array[26], array[50]);
5024     array[50] = vmaxf(array[26], array[50]);
5025     array[26] = tmp;
5026     tmp = vminf(array[27], array[51]);
5027     array[51] = vmaxf(array[27], array[51]);
5028     array[27] = tmp;
5029     tmp = vminf(array[28], array[52]);
5030     array[52] = vmaxf(array[28], array[52]);
5031     array[28] = tmp;
5032     tmp = vminf(array[29], array[53]);
5033     array[53] = vmaxf(array[29], array[53]);
5034     array[29] = tmp;
5035     tmp = vminf(array[30], array[54]);
5036     array[54] = vmaxf(array[30], array[54]);
5037     array[30] = tmp;
5038     tmp = vminf(array[31], array[55]);
5039     array[55] = vmaxf(array[31], array[55]);
5040     array[31] = tmp;
5041     tmp = vminf(array[40], array[64]);
5042     array[64] = vmaxf(array[40], array[64]);
5043     array[40] = tmp;
5044     tmp = vminf(array[41], array[65]);
5045     array[65] = vmaxf(array[41], array[65]);
5046     array[41] = tmp;
5047     tmp = vminf(array[42], array[66]);
5048     array[66] = vmaxf(array[42], array[66]);
5049     array[42] = tmp;
5050     tmp = vminf(array[43], array[67]);
5051     array[67] = vmaxf(array[43], array[67]);
5052     array[43] = tmp;
5053     tmp = vminf(array[44], array[68]);
5054     array[68] = vmaxf(array[44], array[68]);
5055     array[44] = tmp;
5056     tmp = vminf(array[45], array[69]);
5057     array[69] = vmaxf(array[45], array[69]);
5058     array[45] = tmp;
5059     tmp = vminf(array[46], array[70]);
5060     array[70] = vmaxf(array[46], array[70]);
5061     array[46] = tmp;
5062     tmp = vminf(array[47], array[71]);
5063     array[71] = vmaxf(array[47], array[71]);
5064     array[47] = tmp;
5065     tmp = vminf(array[56], array[80]);
5066     array[80] = vmaxf(array[56], array[80]);
5067     array[56] = tmp;
5068     tmp = vminf(array[8], array[16]);
5069     array[16] = vmaxf(array[8], array[16]);
5070     array[8] = tmp;
5071     tmp = vminf(array[9], array[17]);
5072     array[17] = vmaxf(array[9], array[17]);
5073     array[9] = tmp;
5074     tmp = vminf(array[10], array[18]);
5075     array[18] = vmaxf(array[10], array[18]);
5076     array[10] = tmp;
5077     tmp = vminf(array[11], array[19]);
5078     array[19] = vmaxf(array[11], array[19]);
5079     array[11] = tmp;
5080     tmp = vminf(array[12], array[20]);
5081     array[20] = vmaxf(array[12], array[20]);
5082     array[12] = tmp;
5083     tmp = vminf(array[13], array[21]);
5084     array[21] = vmaxf(array[13], array[21]);
5085     array[13] = tmp;
5086     tmp = vminf(array[14], array[22]);
5087     array[22] = vmaxf(array[14], array[22]);
5088     array[14] = tmp;
5089     tmp = vminf(array[15], array[23]);
5090     array[23] = vmaxf(array[15], array[23]);
5091     array[15] = tmp;
5092     tmp = vminf(array[24], array[32]);
5093     array[32] = vmaxf(array[24], array[32]);
5094     array[24] = tmp;
5095     tmp = vminf(array[25], array[33]);
5096     array[33] = vmaxf(array[25], array[33]);
5097     array[25] = tmp;
5098     tmp = vminf(array[26], array[34]);
5099     array[34] = vmaxf(array[26], array[34]);
5100     array[26] = tmp;
5101     tmp = vminf(array[27], array[35]);
5102     array[35] = vmaxf(array[27], array[35]);
5103     array[27] = tmp;
5104     tmp = vminf(array[28], array[36]);
5105     array[36] = vmaxf(array[28], array[36]);
5106     array[28] = tmp;
5107     tmp = vminf(array[29], array[37]);
5108     array[37] = vmaxf(array[29], array[37]);
5109     array[29] = tmp;
5110     tmp = vminf(array[30], array[38]);
5111     array[38] = vmaxf(array[30], array[38]);
5112     array[30] = tmp;
5113     tmp = vminf(array[31], array[39]);
5114     array[39] = vmaxf(array[31], array[39]);
5115     array[31] = tmp;
5116     tmp = vminf(array[40], array[48]);
5117     array[48] = vmaxf(array[40], array[48]);
5118     array[40] = tmp;
5119     tmp = vminf(array[41], array[49]);
5120     array[49] = vmaxf(array[41], array[49]);
5121     array[41] = tmp;
5122     tmp = vminf(array[42], array[50]);
5123     array[50] = vmaxf(array[42], array[50]);
5124     array[42] = tmp;
5125     tmp = vminf(array[43], array[51]);
5126     array[51] = vmaxf(array[43], array[51]);
5127     array[43] = tmp;
5128     tmp = vminf(array[44], array[52]);
5129     array[52] = vmaxf(array[44], array[52]);
5130     array[44] = tmp;
5131     tmp = vminf(array[45], array[53]);
5132     array[53] = vmaxf(array[45], array[53]);
5133     array[45] = tmp;
5134     tmp = vminf(array[46], array[54]);
5135     array[54] = vmaxf(array[46], array[54]);
5136     array[46] = tmp;
5137     tmp = vminf(array[47], array[55]);
5138     array[55] = vmaxf(array[47], array[55]);
5139     array[47] = tmp;
5140     tmp = vminf(array[56], array[64]);
5141     array[64] = vmaxf(array[56], array[64]);
5142     array[56] = tmp;
5143     tmp = vminf(array[57], array[65]);
5144     array[65] = vmaxf(array[57], array[65]);
5145     array[57] = tmp;
5146     tmp = vminf(array[58], array[66]);
5147     array[66] = vmaxf(array[58], array[66]);
5148     array[58] = tmp;
5149     tmp = vminf(array[59], array[67]);
5150     array[67] = vmaxf(array[59], array[67]);
5151     array[59] = tmp;
5152     tmp = vminf(array[60], array[68]);
5153     array[68] = vmaxf(array[60], array[68]);
5154     array[60] = tmp;
5155     tmp = vminf(array[61], array[69]);
5156     array[69] = vmaxf(array[61], array[69]);
5157     array[61] = tmp;
5158     tmp = vminf(array[62], array[70]);
5159     array[70] = vmaxf(array[62], array[70]);
5160     array[62] = tmp;
5161     tmp = vminf(array[63], array[71]);
5162     array[71] = vmaxf(array[63], array[71]);
5163     array[63] = tmp;
5164     tmp = vminf(array[72], array[80]);
5165     array[80] = vmaxf(array[72], array[80]);
5166     array[72] = tmp;
5167     tmp = vminf(array[0], array[4]);
5168     array[4] = vmaxf(array[0], array[4]);
5169     array[0] = tmp;
5170     tmp = vminf(array[1], array[5]);
5171     array[5] = vmaxf(array[1], array[5]);
5172     array[1] = tmp;
5173     tmp = vminf(array[2], array[6]);
5174     array[6] = vmaxf(array[2], array[6]);
5175     array[2] = tmp;
5176     tmp = vminf(array[3], array[7]);
5177     array[7] = vmaxf(array[3], array[7]);
5178     array[3] = tmp;
5179     tmp = vminf(array[8], array[12]);
5180     array[12] = vmaxf(array[8], array[12]);
5181     array[8] = tmp;
5182     tmp = vminf(array[9], array[13]);
5183     array[13] = vmaxf(array[9], array[13]);
5184     array[9] = tmp;
5185     tmp = vminf(array[10], array[14]);
5186     array[14] = vmaxf(array[10], array[14]);
5187     array[10] = tmp;
5188     tmp = vminf(array[11], array[15]);
5189     array[15] = vmaxf(array[11], array[15]);
5190     array[11] = tmp;
5191     tmp = vminf(array[16], array[20]);
5192     array[20] = vmaxf(array[16], array[20]);
5193     array[16] = tmp;
5194     tmp = vminf(array[17], array[21]);
5195     array[21] = vmaxf(array[17], array[21]);
5196     array[17] = tmp;
5197     tmp = vminf(array[18], array[22]);
5198     array[22] = vmaxf(array[18], array[22]);
5199     array[18] = tmp;
5200     tmp = vminf(array[19], array[23]);
5201     array[23] = vmaxf(array[19], array[23]);
5202     array[19] = tmp;
5203     tmp = vminf(array[24], array[28]);
5204     array[28] = vmaxf(array[24], array[28]);
5205     array[24] = tmp;
5206     tmp = vminf(array[25], array[29]);
5207     array[29] = vmaxf(array[25], array[29]);
5208     array[25] = tmp;
5209     tmp = vminf(array[26], array[30]);
5210     array[30] = vmaxf(array[26], array[30]);
5211     array[26] = tmp;
5212     tmp = vminf(array[27], array[31]);
5213     array[31] = vmaxf(array[27], array[31]);
5214     array[27] = tmp;
5215     tmp = vminf(array[32], array[36]);
5216     array[36] = vmaxf(array[32], array[36]);
5217     array[32] = tmp;
5218     tmp = vminf(array[33], array[37]);
5219     array[37] = vmaxf(array[33], array[37]);
5220     array[33] = tmp;
5221     tmp = vminf(array[34], array[38]);
5222     array[38] = vmaxf(array[34], array[38]);
5223     array[34] = tmp;
5224     tmp = vminf(array[35], array[39]);
5225     array[39] = vmaxf(array[35], array[39]);
5226     array[35] = tmp;
5227     tmp = vminf(array[40], array[44]);
5228     array[44] = vmaxf(array[40], array[44]);
5229     array[40] = tmp;
5230     tmp = vminf(array[41], array[45]);
5231     array[45] = vmaxf(array[41], array[45]);
5232     array[41] = tmp;
5233     tmp = vminf(array[42], array[46]);
5234     array[46] = vmaxf(array[42], array[46]);
5235     array[42] = tmp;
5236     tmp = vminf(array[43], array[47]);
5237     array[47] = vmaxf(array[43], array[47]);
5238     array[43] = tmp;
5239     tmp = vminf(array[48], array[52]);
5240     array[52] = vmaxf(array[48], array[52]);
5241     array[48] = tmp;
5242     tmp = vminf(array[49], array[53]);
5243     array[53] = vmaxf(array[49], array[53]);
5244     array[49] = tmp;
5245     tmp = vminf(array[50], array[54]);
5246     array[54] = vmaxf(array[50], array[54]);
5247     array[50] = tmp;
5248     tmp = vminf(array[51], array[55]);
5249     array[55] = vmaxf(array[51], array[55]);
5250     array[51] = tmp;
5251     tmp = vminf(array[56], array[60]);
5252     array[60] = vmaxf(array[56], array[60]);
5253     array[56] = tmp;
5254     tmp = vminf(array[57], array[61]);
5255     array[61] = vmaxf(array[57], array[61]);
5256     array[57] = tmp;
5257     tmp = vminf(array[58], array[62]);
5258     array[62] = vmaxf(array[58], array[62]);
5259     array[58] = tmp;
5260     tmp = vminf(array[59], array[63]);
5261     array[63] = vmaxf(array[59], array[63]);
5262     array[59] = tmp;
5263     tmp = vminf(array[64], array[68]);
5264     array[68] = vmaxf(array[64], array[68]);
5265     array[64] = tmp;
5266     tmp = vminf(array[65], array[69]);
5267     array[69] = vmaxf(array[65], array[69]);
5268     array[65] = tmp;
5269     tmp = vminf(array[66], array[70]);
5270     array[70] = vmaxf(array[66], array[70]);
5271     array[66] = tmp;
5272     tmp = vminf(array[67], array[71]);
5273     array[71] = vmaxf(array[67], array[71]);
5274     array[67] = tmp;
5275     tmp = vminf(array[72], array[76]);
5276     array[76] = vmaxf(array[72], array[76]);
5277     array[72] = tmp;
5278     tmp = vminf(array[73], array[77]);
5279     array[77] = vmaxf(array[73], array[77]);
5280     array[73] = tmp;
5281     tmp = vminf(array[74], array[78]);
5282     array[78] = vmaxf(array[74], array[78]);
5283     array[74] = tmp;
5284     tmp = vminf(array[75], array[79]);
5285     array[79] = vmaxf(array[75], array[79]);
5286     array[75] = tmp;
5287     tmp = vminf(array[4], array[64]);
5288     array[64] = vmaxf(array[4], array[64]);
5289     array[4] = tmp;
5290     tmp = vminf(array[5], array[65]);
5291     array[65] = vmaxf(array[5], array[65]);
5292     array[5] = tmp;
5293     tmp = vminf(array[6], array[66]);
5294     array[66] = vmaxf(array[6], array[66]);
5295     array[6] = tmp;
5296     tmp = vminf(array[7], array[67]);
5297     array[67] = vmaxf(array[7], array[67]);
5298     array[7] = tmp;
5299     tmp = vminf(array[12], array[72]);
5300     array[72] = vmaxf(array[12], array[72]);
5301     array[12] = tmp;
5302     tmp = vminf(array[13], array[73]);
5303     array[73] = vmaxf(array[13], array[73]);
5304     array[13] = tmp;
5305     tmp = vminf(array[14], array[74]);
5306     array[74] = vmaxf(array[14], array[74]);
5307     array[14] = tmp;
5308     tmp = vminf(array[15], array[75]);
5309     array[75] = vmaxf(array[15], array[75]);
5310     array[15] = tmp;
5311     tmp = vminf(array[20], array[80]);
5312     array[80] = vmaxf(array[20], array[80]);
5313     array[20] = tmp;
5314     tmp = vminf(array[4], array[32]);
5315     array[32] = vmaxf(array[4], array[32]);
5316     array[4] = tmp;
5317     tmp = vminf(array[5], array[33]);
5318     array[33] = vmaxf(array[5], array[33]);
5319     array[5] = tmp;
5320     tmp = vminf(array[6], array[34]);
5321     array[34] = vmaxf(array[6], array[34]);
5322     array[6] = tmp;
5323     tmp = vminf(array[7], array[35]);
5324     array[35] = vmaxf(array[7], array[35]);
5325     array[7] = tmp;
5326     tmp = vminf(array[12], array[40]);
5327     array[40] = vmaxf(array[12], array[40]);
5328     array[12] = tmp;
5329     tmp = vminf(array[13], array[41]);
5330     array[41] = vmaxf(array[13], array[41]);
5331     array[13] = tmp;
5332     tmp = vminf(array[14], array[42]);
5333     array[42] = vmaxf(array[14], array[42]);
5334     array[14] = tmp;
5335     tmp = vminf(array[15], array[43]);
5336     array[43] = vmaxf(array[15], array[43]);
5337     array[15] = tmp;
5338     tmp = vminf(array[20], array[48]);
5339     array[48] = vmaxf(array[20], array[48]);
5340     array[20] = tmp;
5341     tmp = vminf(array[21], array[49]);
5342     array[49] = vmaxf(array[21], array[49]);
5343     array[21] = tmp;
5344     tmp = vminf(array[22], array[50]);
5345     array[50] = vmaxf(array[22], array[50]);
5346     array[22] = tmp;
5347     tmp = vminf(array[23], array[51]);
5348     array[51] = vmaxf(array[23], array[51]);
5349     array[23] = tmp;
5350     tmp = vminf(array[28], array[56]);
5351     array[56] = vmaxf(array[28], array[56]);
5352     array[28] = tmp;
5353     tmp = vminf(array[29], array[57]);
5354     array[57] = vmaxf(array[29], array[57]);
5355     array[29] = tmp;
5356     tmp = vminf(array[30], array[58]);
5357     array[58] = vmaxf(array[30], array[58]);
5358     array[30] = tmp;
5359     tmp = vminf(array[31], array[59]);
5360     array[59] = vmaxf(array[31], array[59]);
5361     array[31] = tmp;
5362     tmp = vminf(array[36], array[64]);
5363     array[64] = vmaxf(array[36], array[64]);
5364     array[36] = tmp;
5365     tmp = vminf(array[37], array[65]);
5366     array[65] = vmaxf(array[37], array[65]);
5367     array[37] = tmp;
5368     tmp = vminf(array[38], array[66]);
5369     array[66] = vmaxf(array[38], array[66]);
5370     array[38] = tmp;
5371     tmp = vminf(array[39], array[67]);
5372     array[67] = vmaxf(array[39], array[67]);
5373     array[39] = tmp;
5374     tmp = vminf(array[44], array[72]);
5375     array[72] = vmaxf(array[44], array[72]);
5376     array[44] = tmp;
5377     tmp = vminf(array[45], array[73]);
5378     array[73] = vmaxf(array[45], array[73]);
5379     array[45] = tmp;
5380     tmp = vminf(array[46], array[74]);
5381     array[74] = vmaxf(array[46], array[74]);
5382     array[46] = tmp;
5383     tmp = vminf(array[47], array[75]);
5384     array[75] = vmaxf(array[47], array[75]);
5385     array[47] = tmp;
5386     tmp = vminf(array[52], array[80]);
5387     array[80] = vmaxf(array[52], array[80]);
5388     array[52] = tmp;
5389     tmp = vminf(array[4], array[16]);
5390     array[16] = vmaxf(array[4], array[16]);
5391     array[4] = tmp;
5392     tmp = vminf(array[5], array[17]);
5393     array[17] = vmaxf(array[5], array[17]);
5394     array[5] = tmp;
5395     tmp = vminf(array[6], array[18]);
5396     array[18] = vmaxf(array[6], array[18]);
5397     array[6] = tmp;
5398     tmp = vminf(array[7], array[19]);
5399     array[19] = vmaxf(array[7], array[19]);
5400     array[7] = tmp;
5401     tmp = vminf(array[12], array[24]);
5402     array[24] = vmaxf(array[12], array[24]);
5403     array[12] = tmp;
5404     tmp = vminf(array[13], array[25]);
5405     array[25] = vmaxf(array[13], array[25]);
5406     array[13] = tmp;
5407     tmp = vminf(array[14], array[26]);
5408     array[26] = vmaxf(array[14], array[26]);
5409     array[14] = tmp;
5410     tmp = vminf(array[15], array[27]);
5411     array[27] = vmaxf(array[15], array[27]);
5412     array[15] = tmp;
5413     tmp = vminf(array[20], array[32]);
5414     array[32] = vmaxf(array[20], array[32]);
5415     array[20] = tmp;
5416     tmp = vminf(array[21], array[33]);
5417     array[33] = vmaxf(array[21], array[33]);
5418     array[21] = tmp;
5419     tmp = vminf(array[22], array[34]);
5420     array[34] = vmaxf(array[22], array[34]);
5421     array[22] = tmp;
5422     tmp = vminf(array[23], array[35]);
5423     array[35] = vmaxf(array[23], array[35]);
5424     array[23] = tmp;
5425     tmp = vminf(array[28], array[40]);
5426     array[40] = vmaxf(array[28], array[40]);
5427     array[28] = tmp;
5428     tmp = vminf(array[29], array[41]);
5429     array[41] = vmaxf(array[29], array[41]);
5430     array[29] = tmp;
5431     tmp = vminf(array[30], array[42]);
5432     array[42] = vmaxf(array[30], array[42]);
5433     array[30] = tmp;
5434     tmp = vminf(array[31], array[43]);
5435     array[43] = vmaxf(array[31], array[43]);
5436     array[31] = tmp;
5437     tmp = vminf(array[36], array[48]);
5438     array[48] = vmaxf(array[36], array[48]);
5439     array[36] = tmp;
5440     tmp = vminf(array[37], array[49]);
5441     array[49] = vmaxf(array[37], array[49]);
5442     array[37] = tmp;
5443     tmp = vminf(array[38], array[50]);
5444     array[50] = vmaxf(array[38], array[50]);
5445     array[38] = tmp;
5446     tmp = vminf(array[39], array[51]);
5447     array[51] = vmaxf(array[39], array[51]);
5448     array[39] = tmp;
5449     tmp = vminf(array[44], array[56]);
5450     array[56] = vmaxf(array[44], array[56]);
5451     array[44] = tmp;
5452     tmp = vminf(array[45], array[57]);
5453     array[57] = vmaxf(array[45], array[57]);
5454     array[45] = tmp;
5455     tmp = vminf(array[46], array[58]);
5456     array[58] = vmaxf(array[46], array[58]);
5457     array[46] = tmp;
5458     tmp = vminf(array[47], array[59]);
5459     array[59] = vmaxf(array[47], array[59]);
5460     array[47] = tmp;
5461     tmp = vminf(array[52], array[64]);
5462     array[64] = vmaxf(array[52], array[64]);
5463     array[52] = tmp;
5464     tmp = vminf(array[53], array[65]);
5465     array[65] = vmaxf(array[53], array[65]);
5466     array[53] = tmp;
5467     tmp = vminf(array[54], array[66]);
5468     array[66] = vmaxf(array[54], array[66]);
5469     array[54] = tmp;
5470     tmp = vminf(array[55], array[67]);
5471     array[67] = vmaxf(array[55], array[67]);
5472     array[55] = tmp;
5473     tmp = vminf(array[60], array[72]);
5474     array[72] = vmaxf(array[60], array[72]);
5475     array[60] = tmp;
5476     tmp = vminf(array[61], array[73]);
5477     array[73] = vmaxf(array[61], array[73]);
5478     array[61] = tmp;
5479     tmp = vminf(array[62], array[74]);
5480     array[74] = vmaxf(array[62], array[74]);
5481     array[62] = tmp;
5482     tmp = vminf(array[63], array[75]);
5483     array[75] = vmaxf(array[63], array[75]);
5484     array[63] = tmp;
5485     tmp = vminf(array[68], array[80]);
5486     array[80] = vmaxf(array[68], array[80]);
5487     array[68] = tmp;
5488     tmp = vminf(array[4], array[8]);
5489     array[8] = vmaxf(array[4], array[8]);
5490     array[4] = tmp;
5491     tmp = vminf(array[5], array[9]);
5492     array[9] = vmaxf(array[5], array[9]);
5493     array[5] = tmp;
5494     tmp = vminf(array[6], array[10]);
5495     array[10] = vmaxf(array[6], array[10]);
5496     array[6] = tmp;
5497     tmp = vminf(array[7], array[11]);
5498     array[11] = vmaxf(array[7], array[11]);
5499     array[7] = tmp;
5500     tmp = vminf(array[12], array[16]);
5501     array[16] = vmaxf(array[12], array[16]);
5502     array[12] = tmp;
5503     tmp = vminf(array[13], array[17]);
5504     array[17] = vmaxf(array[13], array[17]);
5505     array[13] = tmp;
5506     tmp = vminf(array[14], array[18]);
5507     array[18] = vmaxf(array[14], array[18]);
5508     array[14] = tmp;
5509     tmp = vminf(array[15], array[19]);
5510     array[19] = vmaxf(array[15], array[19]);
5511     array[15] = tmp;
5512     tmp = vminf(array[20], array[24]);
5513     array[24] = vmaxf(array[20], array[24]);
5514     array[20] = tmp;
5515     tmp = vminf(array[21], array[25]);
5516     array[25] = vmaxf(array[21], array[25]);
5517     array[21] = tmp;
5518     tmp = vminf(array[22], array[26]);
5519     array[26] = vmaxf(array[22], array[26]);
5520     array[22] = tmp;
5521     tmp = vminf(array[23], array[27]);
5522     array[27] = vmaxf(array[23], array[27]);
5523     array[23] = tmp;
5524     tmp = vminf(array[28], array[32]);
5525     array[32] = vmaxf(array[28], array[32]);
5526     array[28] = tmp;
5527     tmp = vminf(array[29], array[33]);
5528     array[33] = vmaxf(array[29], array[33]);
5529     array[29] = tmp;
5530     tmp = vminf(array[30], array[34]);
5531     array[34] = vmaxf(array[30], array[34]);
5532     array[30] = tmp;
5533     tmp = vminf(array[31], array[35]);
5534     array[35] = vmaxf(array[31], array[35]);
5535     array[31] = tmp;
5536     tmp = vminf(array[36], array[40]);
5537     array[40] = vmaxf(array[36], array[40]);
5538     array[36] = tmp;
5539     tmp = vminf(array[37], array[41]);
5540     array[41] = vmaxf(array[37], array[41]);
5541     array[37] = tmp;
5542     tmp = vminf(array[38], array[42]);
5543     array[42] = vmaxf(array[38], array[42]);
5544     array[38] = tmp;
5545     tmp = vminf(array[39], array[43]);
5546     array[43] = vmaxf(array[39], array[43]);
5547     array[39] = tmp;
5548     tmp = vminf(array[44], array[48]);
5549     array[48] = vmaxf(array[44], array[48]);
5550     array[44] = tmp;
5551     tmp = vminf(array[45], array[49]);
5552     array[49] = vmaxf(array[45], array[49]);
5553     array[45] = tmp;
5554     tmp = vminf(array[46], array[50]);
5555     array[50] = vmaxf(array[46], array[50]);
5556     array[46] = tmp;
5557     tmp = vminf(array[47], array[51]);
5558     array[51] = vmaxf(array[47], array[51]);
5559     array[47] = tmp;
5560     tmp = vminf(array[52], array[56]);
5561     array[56] = vmaxf(array[52], array[56]);
5562     array[52] = tmp;
5563     tmp = vminf(array[53], array[57]);
5564     array[57] = vmaxf(array[53], array[57]);
5565     array[53] = tmp;
5566     tmp = vminf(array[54], array[58]);
5567     array[58] = vmaxf(array[54], array[58]);
5568     array[54] = tmp;
5569     tmp = vminf(array[55], array[59]);
5570     array[59] = vmaxf(array[55], array[59]);
5571     array[55] = tmp;
5572     tmp = vminf(array[60], array[64]);
5573     array[64] = vmaxf(array[60], array[64]);
5574     array[60] = tmp;
5575     tmp = vminf(array[61], array[65]);
5576     array[65] = vmaxf(array[61], array[65]);
5577     array[61] = tmp;
5578     tmp = vminf(array[62], array[66]);
5579     array[66] = vmaxf(array[62], array[66]);
5580     array[62] = tmp;
5581     tmp = vminf(array[63], array[67]);
5582     array[67] = vmaxf(array[63], array[67]);
5583     array[63] = tmp;
5584     tmp = vminf(array[68], array[72]);
5585     array[72] = vmaxf(array[68], array[72]);
5586     array[68] = tmp;
5587     tmp = vminf(array[69], array[73]);
5588     array[73] = vmaxf(array[69], array[73]);
5589     array[69] = tmp;
5590     tmp = vminf(array[70], array[74]);
5591     array[74] = vmaxf(array[70], array[74]);
5592     array[70] = tmp;
5593     tmp = vminf(array[71], array[75]);
5594     array[75] = vmaxf(array[71], array[75]);
5595     array[71] = tmp;
5596     tmp = vminf(array[76], array[80]);
5597     array[80] = vmaxf(array[76], array[80]);
5598     array[76] = tmp;
5599     tmp = vminf(array[0], array[2]);
5600     array[2] = vmaxf(array[0], array[2]);
5601     array[0] = tmp;
5602     tmp = vminf(array[1], array[3]);
5603     array[3] = vmaxf(array[1], array[3]);
5604     array[1] = tmp;
5605     tmp = vminf(array[4], array[6]);
5606     array[6] = vmaxf(array[4], array[6]);
5607     array[4] = tmp;
5608     tmp = vminf(array[5], array[7]);
5609     array[7] = vmaxf(array[5], array[7]);
5610     array[5] = tmp;
5611     tmp = vminf(array[8], array[10]);
5612     array[10] = vmaxf(array[8], array[10]);
5613     array[8] = tmp;
5614     tmp = vminf(array[9], array[11]);
5615     array[11] = vmaxf(array[9], array[11]);
5616     array[9] = tmp;
5617     tmp = vminf(array[12], array[14]);
5618     array[14] = vmaxf(array[12], array[14]);
5619     array[12] = tmp;
5620     tmp = vminf(array[13], array[15]);
5621     array[15] = vmaxf(array[13], array[15]);
5622     array[13] = tmp;
5623     tmp = vminf(array[16], array[18]);
5624     array[18] = vmaxf(array[16], array[18]);
5625     array[16] = tmp;
5626     tmp = vminf(array[17], array[19]);
5627     array[19] = vmaxf(array[17], array[19]);
5628     array[17] = tmp;
5629     tmp = vminf(array[20], array[22]);
5630     array[22] = vmaxf(array[20], array[22]);
5631     array[20] = tmp;
5632     tmp = vminf(array[21], array[23]);
5633     array[23] = vmaxf(array[21], array[23]);
5634     array[21] = tmp;
5635     tmp = vminf(array[24], array[26]);
5636     array[26] = vmaxf(array[24], array[26]);
5637     array[24] = tmp;
5638     tmp = vminf(array[25], array[27]);
5639     array[27] = vmaxf(array[25], array[27]);
5640     array[25] = tmp;
5641     tmp = vminf(array[28], array[30]);
5642     array[30] = vmaxf(array[28], array[30]);
5643     array[28] = tmp;
5644     tmp = vminf(array[29], array[31]);
5645     array[31] = vmaxf(array[29], array[31]);
5646     array[29] = tmp;
5647     tmp = vminf(array[32], array[34]);
5648     array[34] = vmaxf(array[32], array[34]);
5649     array[32] = tmp;
5650     tmp = vminf(array[33], array[35]);
5651     array[35] = vmaxf(array[33], array[35]);
5652     array[33] = tmp;
5653     tmp = vminf(array[36], array[38]);
5654     array[38] = vmaxf(array[36], array[38]);
5655     array[36] = tmp;
5656     tmp = vminf(array[37], array[39]);
5657     array[39] = vmaxf(array[37], array[39]);
5658     array[37] = tmp;
5659     tmp = vminf(array[40], array[42]);
5660     array[42] = vmaxf(array[40], array[42]);
5661     array[40] = tmp;
5662     tmp = vminf(array[41], array[43]);
5663     array[43] = vmaxf(array[41], array[43]);
5664     array[41] = tmp;
5665     tmp = vminf(array[44], array[46]);
5666     array[46] = vmaxf(array[44], array[46]);
5667     array[44] = tmp;
5668     tmp = vminf(array[45], array[47]);
5669     array[47] = vmaxf(array[45], array[47]);
5670     array[45] = tmp;
5671     tmp = vminf(array[48], array[50]);
5672     array[50] = vmaxf(array[48], array[50]);
5673     array[48] = tmp;
5674     tmp = vminf(array[49], array[51]);
5675     array[51] = vmaxf(array[49], array[51]);
5676     array[49] = tmp;
5677     tmp = vminf(array[52], array[54]);
5678     array[54] = vmaxf(array[52], array[54]);
5679     array[52] = tmp;
5680     tmp = vminf(array[53], array[55]);
5681     array[55] = vmaxf(array[53], array[55]);
5682     array[53] = tmp;
5683     tmp = vminf(array[56], array[58]);
5684     array[58] = vmaxf(array[56], array[58]);
5685     array[56] = tmp;
5686     tmp = vminf(array[57], array[59]);
5687     array[59] = vmaxf(array[57], array[59]);
5688     array[57] = tmp;
5689     tmp = vminf(array[60], array[62]);
5690     array[62] = vmaxf(array[60], array[62]);
5691     array[60] = tmp;
5692     tmp = vminf(array[61], array[63]);
5693     array[63] = vmaxf(array[61], array[63]);
5694     array[61] = tmp;
5695     tmp = vminf(array[64], array[66]);
5696     array[66] = vmaxf(array[64], array[66]);
5697     array[64] = tmp;
5698     tmp = vminf(array[65], array[67]);
5699     array[67] = vmaxf(array[65], array[67]);
5700     array[65] = tmp;
5701     tmp = vminf(array[68], array[70]);
5702     array[70] = vmaxf(array[68], array[70]);
5703     array[68] = tmp;
5704     tmp = vminf(array[69], array[71]);
5705     array[71] = vmaxf(array[69], array[71]);
5706     array[69] = tmp;
5707     tmp = vminf(array[72], array[74]);
5708     array[74] = vmaxf(array[72], array[74]);
5709     array[72] = tmp;
5710     tmp = vminf(array[73], array[75]);
5711     array[75] = vmaxf(array[73], array[75]);
5712     array[73] = tmp;
5713     tmp = vminf(array[76], array[78]);
5714     array[78] = vmaxf(array[76], array[78]);
5715     array[76] = tmp;
5716     tmp = vminf(array[77], array[79]);
5717     array[79] = vmaxf(array[77], array[79]);
5718     array[77] = tmp;
5719     tmp = vminf(array[2], array[64]);
5720     array[64] = vmaxf(array[2], array[64]);
5721     array[2] = tmp;
5722     tmp = vminf(array[3], array[65]);
5723     array[65] = vmaxf(array[3], array[65]);
5724     array[3] = tmp;
5725     tmp = vminf(array[6], array[68]);
5726     array[68] = vmaxf(array[6], array[68]);
5727     array[6] = tmp;
5728     tmp = vminf(array[7], array[69]);
5729     array[69] = vmaxf(array[7], array[69]);
5730     array[7] = tmp;
5731     tmp = vminf(array[10], array[72]);
5732     array[72] = vmaxf(array[10], array[72]);
5733     array[10] = tmp;
5734     tmp = vminf(array[11], array[73]);
5735     array[73] = vmaxf(array[11], array[73]);
5736     array[11] = tmp;
5737     tmp = vminf(array[14], array[76]);
5738     array[76] = vmaxf(array[14], array[76]);
5739     array[14] = tmp;
5740     tmp = vminf(array[15], array[77]);
5741     array[77] = vmaxf(array[15], array[77]);
5742     array[15] = tmp;
5743     tmp = vminf(array[18], array[80]);
5744     array[80] = vmaxf(array[18], array[80]);
5745     array[18] = tmp;
5746     tmp = vminf(array[2], array[32]);
5747     array[32] = vmaxf(array[2], array[32]);
5748     array[2] = tmp;
5749     tmp = vminf(array[3], array[33]);
5750     array[33] = vmaxf(array[3], array[33]);
5751     array[3] = tmp;
5752     tmp = vminf(array[6], array[36]);
5753     array[36] = vmaxf(array[6], array[36]);
5754     array[6] = tmp;
5755     tmp = vminf(array[7], array[37]);
5756     array[37] = vmaxf(array[7], array[37]);
5757     array[7] = tmp;
5758     tmp = vminf(array[10], array[40]);
5759     array[40] = vmaxf(array[10], array[40]);
5760     array[10] = tmp;
5761     tmp = vminf(array[11], array[41]);
5762     array[41] = vmaxf(array[11], array[41]);
5763     array[11] = tmp;
5764     tmp = vminf(array[14], array[44]);
5765     array[44] = vmaxf(array[14], array[44]);
5766     array[14] = tmp;
5767     tmp = vminf(array[15], array[45]);
5768     array[45] = vmaxf(array[15], array[45]);
5769     array[15] = tmp;
5770     tmp = vminf(array[18], array[48]);
5771     array[48] = vmaxf(array[18], array[48]);
5772     array[18] = tmp;
5773     tmp = vminf(array[19], array[49]);
5774     array[49] = vmaxf(array[19], array[49]);
5775     array[19] = tmp;
5776     tmp = vminf(array[22], array[52]);
5777     array[52] = vmaxf(array[22], array[52]);
5778     array[22] = tmp;
5779     tmp = vminf(array[23], array[53]);
5780     array[53] = vmaxf(array[23], array[53]);
5781     array[23] = tmp;
5782     tmp = vminf(array[26], array[56]);
5783     array[56] = vmaxf(array[26], array[56]);
5784     array[26] = tmp;
5785     tmp = vminf(array[27], array[57]);
5786     array[57] = vmaxf(array[27], array[57]);
5787     array[27] = tmp;
5788     tmp = vminf(array[30], array[60]);
5789     array[60] = vmaxf(array[30], array[60]);
5790     array[30] = tmp;
5791     tmp = vminf(array[31], array[61]);
5792     array[61] = vmaxf(array[31], array[61]);
5793     array[31] = tmp;
5794     tmp = vminf(array[34], array[64]);
5795     array[64] = vmaxf(array[34], array[64]);
5796     array[34] = tmp;
5797     tmp = vminf(array[35], array[65]);
5798     array[65] = vmaxf(array[35], array[65]);
5799     array[35] = tmp;
5800     tmp = vminf(array[38], array[68]);
5801     array[68] = vmaxf(array[38], array[68]);
5802     array[38] = tmp;
5803     tmp = vminf(array[39], array[69]);
5804     array[69] = vmaxf(array[39], array[69]);
5805     array[39] = tmp;
5806     tmp = vminf(array[42], array[72]);
5807     array[72] = vmaxf(array[42], array[72]);
5808     array[42] = tmp;
5809     tmp = vminf(array[43], array[73]);
5810     array[73] = vmaxf(array[43], array[73]);
5811     array[43] = tmp;
5812     tmp = vminf(array[46], array[76]);
5813     array[76] = vmaxf(array[46], array[76]);
5814     array[46] = tmp;
5815     tmp = vminf(array[47], array[77]);
5816     array[77] = vmaxf(array[47], array[77]);
5817     array[47] = tmp;
5818     tmp = vminf(array[50], array[80]);
5819     array[80] = vmaxf(array[50], array[80]);
5820     array[50] = tmp;
5821     tmp = vminf(array[2], array[16]);
5822     array[16] = vmaxf(array[2], array[16]);
5823     array[2] = tmp;
5824     tmp = vminf(array[3], array[17]);
5825     array[17] = vmaxf(array[3], array[17]);
5826     array[3] = tmp;
5827     tmp = vminf(array[6], array[20]);
5828     array[20] = vmaxf(array[6], array[20]);
5829     array[6] = tmp;
5830     tmp = vminf(array[7], array[21]);
5831     array[21] = vmaxf(array[7], array[21]);
5832     array[7] = tmp;
5833     tmp = vminf(array[10], array[24]);
5834     array[24] = vmaxf(array[10], array[24]);
5835     array[10] = tmp;
5836     tmp = vminf(array[11], array[25]);
5837     array[25] = vmaxf(array[11], array[25]);
5838     array[11] = tmp;
5839     tmp = vminf(array[14], array[28]);
5840     array[28] = vmaxf(array[14], array[28]);
5841     array[14] = tmp;
5842     tmp = vminf(array[15], array[29]);
5843     array[29] = vmaxf(array[15], array[29]);
5844     array[15] = tmp;
5845     tmp = vminf(array[18], array[32]);
5846     array[32] = vmaxf(array[18], array[32]);
5847     array[18] = tmp;
5848     tmp = vminf(array[19], array[33]);
5849     array[33] = vmaxf(array[19], array[33]);
5850     array[19] = tmp;
5851     tmp = vminf(array[22], array[36]);
5852     array[36] = vmaxf(array[22], array[36]);
5853     array[22] = tmp;
5854     tmp = vminf(array[23], array[37]);
5855     array[37] = vmaxf(array[23], array[37]);
5856     array[23] = tmp;
5857     tmp = vminf(array[26], array[40]);
5858     array[40] = vmaxf(array[26], array[40]);
5859     array[26] = tmp;
5860     tmp = vminf(array[27], array[41]);
5861     array[41] = vmaxf(array[27], array[41]);
5862     array[27] = tmp;
5863     tmp = vminf(array[30], array[44]);
5864     array[44] = vmaxf(array[30], array[44]);
5865     array[30] = tmp;
5866     tmp = vminf(array[31], array[45]);
5867     array[45] = vmaxf(array[31], array[45]);
5868     array[31] = tmp;
5869     tmp = vminf(array[34], array[48]);
5870     array[48] = vmaxf(array[34], array[48]);
5871     array[34] = tmp;
5872     tmp = vminf(array[35], array[49]);
5873     array[49] = vmaxf(array[35], array[49]);
5874     array[35] = tmp;
5875     tmp = vminf(array[38], array[52]);
5876     array[52] = vmaxf(array[38], array[52]);
5877     array[38] = tmp;
5878     tmp = vminf(array[39], array[53]);
5879     array[53] = vmaxf(array[39], array[53]);
5880     array[39] = tmp;
5881     tmp = vminf(array[42], array[56]);
5882     array[56] = vmaxf(array[42], array[56]);
5883     array[42] = tmp;
5884     tmp = vminf(array[43], array[57]);
5885     array[57] = vmaxf(array[43], array[57]);
5886     array[43] = tmp;
5887     tmp = vminf(array[46], array[60]);
5888     array[60] = vmaxf(array[46], array[60]);
5889     array[46] = tmp;
5890     tmp = vminf(array[47], array[61]);
5891     array[61] = vmaxf(array[47], array[61]);
5892     array[47] = tmp;
5893     tmp = vminf(array[50], array[64]);
5894     array[64] = vmaxf(array[50], array[64]);
5895     array[50] = tmp;
5896     tmp = vminf(array[51], array[65]);
5897     array[65] = vmaxf(array[51], array[65]);
5898     array[51] = tmp;
5899     tmp = vminf(array[54], array[68]);
5900     array[68] = vmaxf(array[54], array[68]);
5901     array[54] = tmp;
5902     tmp = vminf(array[55], array[69]);
5903     array[69] = vmaxf(array[55], array[69]);
5904     array[55] = tmp;
5905     tmp = vminf(array[58], array[72]);
5906     array[72] = vmaxf(array[58], array[72]);
5907     array[58] = tmp;
5908     tmp = vminf(array[59], array[73]);
5909     array[73] = vmaxf(array[59], array[73]);
5910     array[59] = tmp;
5911     tmp = vminf(array[62], array[76]);
5912     array[76] = vmaxf(array[62], array[76]);
5913     array[62] = tmp;
5914     tmp = vminf(array[63], array[77]);
5915     array[77] = vmaxf(array[63], array[77]);
5916     array[63] = tmp;
5917     tmp = vminf(array[66], array[80]);
5918     array[80] = vmaxf(array[66], array[80]);
5919     array[66] = tmp;
5920     tmp = vminf(array[2], array[8]);
5921     array[8] = vmaxf(array[2], array[8]);
5922     array[2] = tmp;
5923     tmp = vminf(array[3], array[9]);
5924     array[9] = vmaxf(array[3], array[9]);
5925     array[3] = tmp;
5926     tmp = vminf(array[6], array[12]);
5927     array[12] = vmaxf(array[6], array[12]);
5928     array[6] = tmp;
5929     tmp = vminf(array[7], array[13]);
5930     array[13] = vmaxf(array[7], array[13]);
5931     array[7] = tmp;
5932     tmp = vminf(array[10], array[16]);
5933     array[16] = vmaxf(array[10], array[16]);
5934     array[10] = tmp;
5935     tmp = vminf(array[11], array[17]);
5936     array[17] = vmaxf(array[11], array[17]);
5937     array[11] = tmp;
5938     tmp = vminf(array[14], array[20]);
5939     array[20] = vmaxf(array[14], array[20]);
5940     array[14] = tmp;
5941     tmp = vminf(array[15], array[21]);
5942     array[21] = vmaxf(array[15], array[21]);
5943     array[15] = tmp;
5944     tmp = vminf(array[18], array[24]);
5945     array[24] = vmaxf(array[18], array[24]);
5946     array[18] = tmp;
5947     tmp = vminf(array[19], array[25]);
5948     array[25] = vmaxf(array[19], array[25]);
5949     array[19] = tmp;
5950     tmp = vminf(array[22], array[28]);
5951     array[28] = vmaxf(array[22], array[28]);
5952     array[22] = tmp;
5953     tmp = vminf(array[23], array[29]);
5954     array[29] = vmaxf(array[23], array[29]);
5955     array[23] = tmp;
5956     tmp = vminf(array[26], array[32]);
5957     array[32] = vmaxf(array[26], array[32]);
5958     array[26] = tmp;
5959     tmp = vminf(array[27], array[33]);
5960     array[33] = vmaxf(array[27], array[33]);
5961     array[27] = tmp;
5962     tmp = vminf(array[30], array[36]);
5963     array[36] = vmaxf(array[30], array[36]);
5964     array[30] = tmp;
5965     tmp = vminf(array[31], array[37]);
5966     array[37] = vmaxf(array[31], array[37]);
5967     array[31] = tmp;
5968     tmp = vminf(array[34], array[40]);
5969     array[40] = vmaxf(array[34], array[40]);
5970     array[34] = tmp;
5971     tmp = vminf(array[35], array[41]);
5972     array[41] = vmaxf(array[35], array[41]);
5973     array[35] = tmp;
5974     tmp = vminf(array[38], array[44]);
5975     array[44] = vmaxf(array[38], array[44]);
5976     array[38] = tmp;
5977     tmp = vminf(array[39], array[45]);
5978     array[45] = vmaxf(array[39], array[45]);
5979     array[39] = tmp;
5980     tmp = vminf(array[42], array[48]);
5981     array[48] = vmaxf(array[42], array[48]);
5982     array[42] = tmp;
5983     tmp = vminf(array[43], array[49]);
5984     array[49] = vmaxf(array[43], array[49]);
5985     array[43] = tmp;
5986     tmp = vminf(array[46], array[52]);
5987     array[52] = vmaxf(array[46], array[52]);
5988     array[46] = tmp;
5989     tmp = vminf(array[47], array[53]);
5990     array[53] = vmaxf(array[47], array[53]);
5991     array[47] = tmp;
5992     tmp = vminf(array[50], array[56]);
5993     array[56] = vmaxf(array[50], array[56]);
5994     array[50] = tmp;
5995     tmp = vminf(array[51], array[57]);
5996     array[57] = vmaxf(array[51], array[57]);
5997     array[51] = tmp;
5998     tmp = vminf(array[54], array[60]);
5999     array[60] = vmaxf(array[54], array[60]);
6000     array[54] = tmp;
6001     tmp = vminf(array[55], array[61]);
6002     array[61] = vmaxf(array[55], array[61]);
6003     array[55] = tmp;
6004     tmp = vminf(array[58], array[64]);
6005     array[64] = vmaxf(array[58], array[64]);
6006     array[58] = tmp;
6007     tmp = vminf(array[59], array[65]);
6008     array[65] = vmaxf(array[59], array[65]);
6009     array[59] = tmp;
6010     tmp = vminf(array[62], array[68]);
6011     array[68] = vmaxf(array[62], array[68]);
6012     array[62] = tmp;
6013     tmp = vminf(array[63], array[69]);
6014     array[69] = vmaxf(array[63], array[69]);
6015     array[63] = tmp;
6016     tmp = vminf(array[66], array[72]);
6017     array[72] = vmaxf(array[66], array[72]);
6018     array[66] = tmp;
6019     tmp = vminf(array[67], array[73]);
6020     array[73] = vmaxf(array[67], array[73]);
6021     array[67] = tmp;
6022     tmp = vminf(array[70], array[76]);
6023     array[76] = vmaxf(array[70], array[76]);
6024     array[70] = tmp;
6025     tmp = vminf(array[71], array[77]);
6026     array[77] = vmaxf(array[71], array[77]);
6027     array[71] = tmp;
6028     tmp = vminf(array[74], array[80]);
6029     array[80] = vmaxf(array[74], array[80]);
6030     array[74] = tmp;
6031     tmp = vminf(array[2], array[4]);
6032     array[4] = vmaxf(array[2], array[4]);
6033     array[2] = tmp;
6034     tmp = vminf(array[3], array[5]);
6035     array[5] = vmaxf(array[3], array[5]);
6036     array[3] = tmp;
6037     tmp = vminf(array[6], array[8]);
6038     array[8] = vmaxf(array[6], array[8]);
6039     array[6] = tmp;
6040     tmp = vminf(array[7], array[9]);
6041     array[9] = vmaxf(array[7], array[9]);
6042     array[7] = tmp;
6043     tmp = vminf(array[10], array[12]);
6044     array[12] = vmaxf(array[10], array[12]);
6045     array[10] = tmp;
6046     tmp = vminf(array[11], array[13]);
6047     array[13] = vmaxf(array[11], array[13]);
6048     array[11] = tmp;
6049     tmp = vminf(array[14], array[16]);
6050     array[16] = vmaxf(array[14], array[16]);
6051     array[14] = tmp;
6052     tmp = vminf(array[15], array[17]);
6053     array[17] = vmaxf(array[15], array[17]);
6054     array[15] = tmp;
6055     tmp = vminf(array[18], array[20]);
6056     array[20] = vmaxf(array[18], array[20]);
6057     array[18] = tmp;
6058     tmp = vminf(array[19], array[21]);
6059     array[21] = vmaxf(array[19], array[21]);
6060     array[19] = tmp;
6061     tmp = vminf(array[22], array[24]);
6062     array[24] = vmaxf(array[22], array[24]);
6063     array[22] = tmp;
6064     tmp = vminf(array[23], array[25]);
6065     array[25] = vmaxf(array[23], array[25]);
6066     array[23] = tmp;
6067     tmp = vminf(array[26], array[28]);
6068     array[28] = vmaxf(array[26], array[28]);
6069     array[26] = tmp;
6070     tmp = vminf(array[27], array[29]);
6071     array[29] = vmaxf(array[27], array[29]);
6072     array[27] = tmp;
6073     tmp = vminf(array[30], array[32]);
6074     array[32] = vmaxf(array[30], array[32]);
6075     array[30] = tmp;
6076     tmp = vminf(array[31], array[33]);
6077     array[33] = vmaxf(array[31], array[33]);
6078     array[31] = tmp;
6079     tmp = vminf(array[34], array[36]);
6080     array[36] = vmaxf(array[34], array[36]);
6081     array[34] = tmp;
6082     tmp = vminf(array[35], array[37]);
6083     array[37] = vmaxf(array[35], array[37]);
6084     array[35] = tmp;
6085     tmp = vminf(array[38], array[40]);
6086     array[40] = vmaxf(array[38], array[40]);
6087     array[38] = tmp;
6088     tmp = vminf(array[39], array[41]);
6089     array[41] = vmaxf(array[39], array[41]);
6090     array[39] = tmp;
6091     tmp = vminf(array[42], array[44]);
6092     array[44] = vmaxf(array[42], array[44]);
6093     array[42] = tmp;
6094     tmp = vminf(array[43], array[45]);
6095     array[45] = vmaxf(array[43], array[45]);
6096     array[43] = tmp;
6097     tmp = vminf(array[46], array[48]);
6098     array[48] = vmaxf(array[46], array[48]);
6099     array[46] = tmp;
6100     tmp = vminf(array[47], array[49]);
6101     array[49] = vmaxf(array[47], array[49]);
6102     array[47] = tmp;
6103     tmp = vminf(array[50], array[52]);
6104     array[52] = vmaxf(array[50], array[52]);
6105     array[50] = tmp;
6106     tmp = vminf(array[51], array[53]);
6107     array[53] = vmaxf(array[51], array[53]);
6108     array[51] = tmp;
6109     tmp = vminf(array[54], array[56]);
6110     array[56] = vmaxf(array[54], array[56]);
6111     array[54] = tmp;
6112     tmp = vminf(array[55], array[57]);
6113     array[57] = vmaxf(array[55], array[57]);
6114     array[55] = tmp;
6115     tmp = vminf(array[58], array[60]);
6116     array[60] = vmaxf(array[58], array[60]);
6117     array[58] = tmp;
6118     tmp = vminf(array[59], array[61]);
6119     array[61] = vmaxf(array[59], array[61]);
6120     array[59] = tmp;
6121     tmp = vminf(array[62], array[64]);
6122     array[64] = vmaxf(array[62], array[64]);
6123     array[62] = tmp;
6124     tmp = vminf(array[63], array[65]);
6125     array[65] = vmaxf(array[63], array[65]);
6126     array[63] = tmp;
6127     tmp = vminf(array[66], array[68]);
6128     array[68] = vmaxf(array[66], array[68]);
6129     array[66] = tmp;
6130     tmp = vminf(array[67], array[69]);
6131     array[69] = vmaxf(array[67], array[69]);
6132     array[67] = tmp;
6133     tmp = vminf(array[70], array[72]);
6134     array[72] = vmaxf(array[70], array[72]);
6135     array[70] = tmp;
6136     tmp = vminf(array[71], array[73]);
6137     array[73] = vmaxf(array[71], array[73]);
6138     array[71] = tmp;
6139     tmp = vminf(array[74], array[76]);
6140     array[76] = vmaxf(array[74], array[76]);
6141     array[74] = tmp;
6142     tmp = vminf(array[75], array[77]);
6143     array[77] = vmaxf(array[75], array[77]);
6144     array[75] = tmp;
6145     tmp = vminf(array[78], array[80]);
6146     array[80] = vmaxf(array[78], array[80]);
6147     array[78] = tmp;
6148     array[1] = vmaxf(array[0], array[1]);
6149     array[3] = vmaxf(array[2], array[3]);
6150     array[5] = vmaxf(array[4], array[5]);
6151     array[7] = vmaxf(array[6], array[7]);
6152     array[9] = vmaxf(array[8], array[9]);
6153     array[11] = vmaxf(array[10], array[11]);
6154     array[13] = vmaxf(array[12], array[13]);
6155     array[15] = vmaxf(array[14], array[15]);
6156     array[17] = vmaxf(array[16], array[17]);
6157     array[19] = vmaxf(array[18], array[19]);
6158     array[21] = vmaxf(array[20], array[21]);
6159     array[23] = vmaxf(array[22], array[23]);
6160     array[25] = vmaxf(array[24], array[25]);
6161     array[27] = vmaxf(array[26], array[27]);
6162     array[29] = vmaxf(array[28], array[29]);
6163     array[31] = vmaxf(array[30], array[31]);
6164     array[33] = vmaxf(array[32], array[33]);
6165     array[35] = vmaxf(array[34], array[35]);
6166     array[37] = vmaxf(array[36], array[37]);
6167     array[39] = vmaxf(array[38], array[39]);
6168     array[40] = vminf(array[40], array[41]);
6169     array[42] = vminf(array[42], array[43]);
6170     array[44] = vminf(array[44], array[45]);
6171     array[46] = vminf(array[46], array[47]);
6172     array[48] = vminf(array[48], array[49]);
6173     array[50] = vminf(array[50], array[51]);
6174     array[52] = vminf(array[52], array[53]);
6175     array[54] = vminf(array[54], array[55]);
6176     array[56] = vminf(array[56], array[57]);
6177     array[58] = vminf(array[58], array[59]);
6178     array[60] = vminf(array[60], array[61]);
6179     array[62] = vminf(array[62], array[63]);
6180     array[64] = vminf(array[64], array[65]);
6181     array[66] = vminf(array[66], array[67]);
6182     array[68] = vminf(array[68], array[69]);
6183     array[70] = vminf(array[70], array[71]);
6184     array[72] = vminf(array[72], array[73]);
6185     array[74] = vminf(array[74], array[75]);
6186     array[76] = vminf(array[76], array[77]);
6187     array[78] = vminf(array[78], array[79]);
6188     array[64] = vmaxf(array[1], array[64]);
6189     array[66] = vmaxf(array[3], array[66]);
6190     array[68] = vmaxf(array[5], array[68]);
6191     array[70] = vmaxf(array[7], array[70]);
6192     array[9] = vminf(array[9], array[72]);
6193     array[11] = vminf(array[11], array[74]);
6194     array[13] = vminf(array[13], array[76]);
6195     array[15] = vminf(array[15], array[78]);
6196     array[17] = vminf(array[17], array[80]);
6197     array[40] = vmaxf(array[9], array[40]);
6198     array[42] = vmaxf(array[11], array[42]);
6199     array[44] = vmaxf(array[13], array[44]);
6200     array[46] = vmaxf(array[15], array[46]);
6201     array[48] = vmaxf(array[17], array[48]);
6202     array[50] = vmaxf(array[19], array[50]);
6203     array[52] = vmaxf(array[21], array[52]);
6204     array[54] = vmaxf(array[23], array[54]);
6205     array[25] = vminf(array[25], array[56]);
6206     array[27] = vminf(array[27], array[58]);
6207     array[29] = vminf(array[29], array[60]);
6208     array[31] = vminf(array[31], array[62]);
6209     array[33] = vminf(array[33], array[64]);
6210     array[35] = vminf(array[35], array[66]);
6211     array[37] = vminf(array[37], array[68]);
6212     array[39] = vminf(array[39], array[70]);
6213     array[40] = vmaxf(array[25], array[40]);
6214     array[42] = vmaxf(array[27], array[42]);
6215     array[44] = vmaxf(array[29], array[44]);
6216     array[46] = vmaxf(array[31], array[46]);
6217     array[33] = vminf(array[33], array[48]);
6218     array[35] = vminf(array[35], array[50]);
6219     array[37] = vminf(array[37], array[52]);
6220     array[39] = vminf(array[39], array[54]);
6221     array[40] = vmaxf(array[33], array[40]);
6222     array[42] = vmaxf(array[35], array[42]);
6223     array[37] = vminf(array[37], array[44]);
6224     array[39] = vminf(array[39], array[46]);
6225     array[40] = vmaxf(array[37], array[40]);
6226     array[39] = vminf(array[39], array[42]);
6227     return vmaxf(array[39], array[40]);
6228 }
6229 #endif
6230 
6231 template<typename T, typename... ARGS>
median(T arg,ARGS...args)6232 inline T median(T arg, ARGS... args)
6233 {
6234     return median(std::array<T, sizeof...(args) + 1>{std::move(arg), std::move(args)...});
6235 }
6236 
6237 template<typename T>
middle4of6(const std::array<T,6> & array)6238 inline std::array<T, 4> middle4of6(const std::array<T, 6>& array)
6239 {
6240     std::array<T, 4> res;
6241 
6242     res[0] = std::min(array[1], array[2]);
6243     res[1] = std::max(array[1], array[2]);
6244     T left = std::min(array[0], res[1]);
6245     res[1] = std::max(array[0], res[1]);
6246     T tmp = std::min(left, res[0]);
6247     res[0] = std::max(left, res[0]);
6248     left = tmp;
6249     res[3] = std::min(array[4], array[5]);
6250     T right = std::max(array[4], array[5]);
6251     res[2] = std::min(array[3], right);
6252     right = std::max(array[3], right);
6253     tmp = std::min(res[2], res[3]);
6254     res[3] = std::max(res[2], res[3]);
6255     res[2] = std::max(left, tmp);
6256     res[1] = std::min(res[1], right);
6257 
6258     return res;
6259 }
6260 
6261 #ifdef __SSE2__
6262 template<>
middle4of6(const std::array<vfloat,6> & array)6263 inline std::array<vfloat, 4> middle4of6(const std::array<vfloat, 6>& array)
6264 {
6265     std::array<vfloat, 4> res;
6266 
6267     res[0] = vminf(array[1], array[2]);
6268     res[1] = vmaxf(array[1], array[2]);
6269     vfloat left = vminf(array[0], res[1]);
6270     res[1] = vmaxf(array[0], res[1]);
6271     vfloat tmp = vminf(left, res[0]);
6272     res[0] = vmaxf(left, res[0]);
6273     left = tmp;
6274     res[3] = vminf(array[4], array[5]);
6275     vfloat right = vmaxf(array[4], array[5]);
6276     res[2] = vminf(array[3], right);
6277     right = vmaxf(array[3], right);
6278     tmp = vminf(res[2], res[3]);
6279     res[3] = vmaxf(res[2], res[3]);
6280     res[2] = vmaxf(left, tmp);
6281     res[1] = vminf(res[1], right);
6282 
6283     return res;
6284 }
6285 #endif
6286 
6287 template<typename T>
middle4of6(T arg0,T arg1,T arg2,T arg3,T arg4,T arg5)6288 inline std::array<T, 4> middle4of6(T arg0, T arg1, T arg2, T arg3, T arg4, T arg5)
6289 {
6290     return middle4of6(std::array<T, 6>{std::move(arg0), std::move(arg1), std::move(arg2), std::move(arg3), std::move(arg4), std::move(arg5)});
6291 }
6292