blob: a205c5f3d203fbe1f112eefb0424563e8eb7e450 [file] [log] [blame]
buzbee9e0f9b02011-08-24 15:32:46 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#include <dirent.h>
4#include <dlfcn.h>
5#include <sys/stat.h>
6#include <sys/types.h>
7
8#include "base64.h"
9#include "heap.h"
10#include "thread.h"
11#include "stringprintf.h"
12#include "class_linker.h"
13#include "dex_file.h"
14
15#include "unicode/uclean.h"
16#include "unicode/uvernum.h"
17
18#include "gtest/gtest.h"
19
20namespace art {
21
22
23//class IntMath {
24//
25// /*
26// * Try to cause some unary operations.
27// */
28// static int unopTest(int x) {
29// x = -x;
30// x ^= 0xffffffff;
31// return x;
32// }
33//
34// static int shiftTest1() {
35// final int[] mBytes = {
36// 0x11, 0x22, 0x33, 0x44, 0x88, 0x99, 0xaa, 0xbb
37// };
38// long l;
39// int i1, i2;
40//
41// i1 = mBytes[0] | mBytes[1] << 8 | mBytes[2] << 16 | mBytes[3] << 24;
42// i2 = mBytes[4] | mBytes[5] << 8 | mBytes[6] << 16 | mBytes[7] << 24;
43// l = i1 | ((long)i2 << 32);
44//
45// if (i1 != 0x44332211) { return 1; }
46// if (i2 != 0xbbaa9988) { return 2; }
47// if (l != 0xbbaa998844332211L) { return 3; }
48//
49// l = (long)mBytes[0]
50// | (long)mBytes[1] << 8
51// | (long)mBytes[2] << 16
52// | (long)mBytes[3] << 24
53// | (long)mBytes[4] << 32
54// | (long)mBytes[5] << 40
55// | (long)mBytes[6] << 48
56// | (long)mBytes[7] << 56;
57//
58// if (l != 0xbbaa998844332211L) { return 4; }
59// return 0;
60// }
61//
62// static int shiftTest2() {
63//
64// long a = 0x11;
65// long b = 0x22;
66// long c = 0x33;
67// long d = 0x44;
68// long e = 0x55;
69// long f = 0x66;
70// long g = 0x77;
71// long h = 0x88;
72//
73// long result = ((a << 56) | (b << 48) | (c << 40) | (d << 32) |
74// (e << 24) | (f << 16) | (g << 8) | h);
75//
76// if (result != 0x1122334455667788L) { return 1; }
77// return 0;
78// }
79//
80// static int unsignedShiftTest() {
81// byte b = -4;
82// short s = -4;
83// char c = 0xfffc;
84// int i = -4;
85//
86// b >>>= 4;
87// s >>>= 4;
88// c >>>= 4;
89// i >>>= 4;
90//
91// if ((int) b != -1) { return 1; }
92// if ((int) s != -1) { return 2; }
93// if ((int) c != 0x0fff) { return 3; }
94// if (i != 268435455) { return 4; }
95// return 0;
96// }
97//
98// static int convTest() {
99//
100// float f;
101// double d;
102// int i;
103// long l;
104//
105// /* int --> long */
106// i = 7654;
107// l = (long) i;
108// if (l != 7654L) { return 1; }
109//
110// i = -7654;
111// l = (long) i;
112// if (l != -7654L) { return 2; }
113//
114// /* long --> int (with truncation) */
115// l = 5678956789L;
116// i = (int) l;
117// if (i != 1383989493) { return 3; }
118//
119// l = -5678956789L;
120// i = (int) l;
121// if (i != -1383989493) { return 4; }
122// return 0;
123// }
124//
125// static int charSubTest() {
126//
127// char char1 = 0x00e9;
128// char char2 = 0xffff;
129// int i;
130//
131// /* chars are unsigned-expanded to ints before subtraction */
132// i = char1 - char2;
133// if (i != 0xffff00ea) { return 1; }
134// return 0;
135// }
136//
137// /*
138// * We pass in the arguments and return the results so the compiler
139// * doesn't do the math for us. (x=70000, y=-3)
140// */
141// static int intOperTest(int x, int y) {
142// int[] results = new int[10];
143//
144// /* this seems to generate "op-int" instructions */
145// results[0] = x + y;
146// results[1] = x - y;
147// results[2] = x * y;
148// results[3] = x * x;
149// results[4] = x / y;
150// results[5] = x % -y;
151// results[6] = x & y;
152// results[7] = x | y;
153// results[8] = x ^ y;
154//
155// /* this seems to generate "op-int/2addr" instructions */
156// results[9] = x + ((((((((x + y) - y) * y) / y) % y) & y) | y) ^ y);
157//
158// /* check this edge case while we're here (div-int/2addr) */
159// int minInt = -2147483648;
160// int negOne = -results[5];
161// int plusOne = 1;
162// int result = (((minInt + plusOne) - plusOne) / negOne) / negOne;
163//
164// if (result != minInt) { return 1;};
165// if (results[0] != 69997) { return 2;};
166// if (results[1] != 70003) { return 3;};
167// if (results[2] != -210000) { return 4;};
168// if (results[3] != 605032704) { return 5;};
169// if (results[4] != -23333) { return 6;};
170// if (results[5] != 1) { return 7;};
171// if (results[6] != 70000) { return 8;};
172// if (results[7] != -3) { return 9;};
173// if (results[8] != -70003) { return 10;};
174// if (results[9] != 70000) { return 11;};
175//
176// return 0;
177// }
178//
179// /*
180// * More operations, this time with 16-bit constants. (x=77777)
181// */
182// static int lit16Test(int x) {
183//
184// int[] results = new int[8];
185//
186// /* try to generate op-int/lit16" instructions */
187// results[0] = x + 1000;
188// results[1] = 1000 - x;
189// results[2] = x * 1000;
190// results[3] = x / 1000;
191// results[4] = x % 1000;
192// results[5] = x & 1000;
193// results[6] = x | -1000;
194// results[7] = x ^ -1000;
195//
196// if (results[0] != 78777) { return 1; }
197// if (results[1] != -76777) { return 2; }
198// if (results[2] != 77777000) { return 3; }
199// if (results[3] != 77) { return 4; }
200// if (results[4] != 777) { return 5; }
201// if (results[5] != 960) { return 6; }
202// if (results[6] != -39) { return 7; }
203// if (results[7] != -76855) { return 8; }
204// return 0;
205// }
206//
207// /*
208// * More operations, this time with 8-bit constants. (x=-55555)
209// */
210// static int lit8Test(int x) {
211//
212// int[] results = new int[8];
213//
214// /* try to generate op-int/lit8" instructions */
215// results[0] = x + 10;
216// results[1] = 10 - x;
217// results[2] = x * 10;
218// results[3] = x / 10;
219// results[4] = x % 10;
220// results[5] = x & 10;
221// results[6] = x | -10;
222// results[7] = x ^ -10;
223// int minInt = -2147483648;
224// int result = minInt / -1;
225// if (result != minInt) {return 1; }
226// if (results[0] != -55545) {return 2; }
227// if (results[1] != 55565) {return 3; }
228// if (results[2] != -555550) {return 4; }
229// if (results[3] != -5555) {return 5; }
230// if (results[4] != -5) {return 6; }
231// if (results[5] != 8) {return 7; }
232// if (results[6] != -1) {return 8; }
233// if (results[7] != 55563) {return 9; }
234// return 0;
235// }
236//
237//
238// /*
239// * Shift some data. (value=0xff00aa01, dist=8)
240// */
241// static int intShiftTest(int value, int dist) {
242// int results[] = new int[4];
243// results[0] = value << dist;
244// results[1] = value >> dist;
245// results[2] = value >>> dist;
246// results[3] = (((value << dist) >> dist) >>> dist) << dist;
247// if (results[0] != 0x00aa0100) {return 1; }
248// if (results[1] != 0xffff00aa) {return 2; }
249// if (results[2] != 0x00ff00aa) {return 3; }
250// if (results[3] != 0xaa00) {return 4; }
251// return 0;
252// }
253//
254// /*
255// * We pass in the arguments and return the results so the compiler
256// * doesn't do the math for us. (x=70000000000, y=-3)
257// */
258// static int longOperTest(long x, long y) {
259// long[] results = new long[10];
260//
261// /* this seems to generate "op-long" instructions */
262// results[0] = x + y;
263// results[1] = x - y;
264// results[2] = x * y;
265// results[3] = x * x;
266// results[4] = x / y;
267// results[5] = x % -y;
268// results[6] = x & y;
269// results[7] = x | y;
270// results[8] = x ^ y;
271// /* this seems to generate "op-long/2addr" instructions */
272// results[9] = x + ((((((((x + y) - y) * y) / y) % y) & y) | y) ^ y);
273// /* check this edge case while we're here (div-long/2addr) */
274// long minLong = -9223372036854775808L;
275// long negOne = -results[5];
276// long plusOne = 1;
277// long result = (((minLong + plusOne) - plusOne) / negOne) / negOne;
278// if (result != minLong) { return 1; }
279// if (results[0] != 69999999997L) { return 2; }
280// if (results[1] != 70000000003L) { return 3; }
281// if (results[2] != -210000000000L) { return 4; }
282// if (results[3] != -6833923606740729856L) { return 5; } // overflow
283// if (results[4] != -23333333333L) { return 6; }
284// if (results[5] != 1) { return 7; }
285// if (results[6] != 70000000000L) { return 8; }
286// if (results[7] != -3) { return 9; }
287// if (results[8] != -70000000003L) { return 10; }
288// if (results[9] != 70000000000L) { return 11; }
289// if (results.length != 10) { return 12; }
290// return 0;
291// }
292//
293// /*
294// * Shift some data. (value=0xd5aa96deff00aa01, dist=8)
295// */
296// static long longShiftTest(long value, int dist) {
297// long results[] = new long[4];
298// results[0] = value << dist;
299// results[1] = value >> dist;
300// results[2] = value >>> dist;
301// results[3] = (((value << dist) >> dist) >>> dist) << dist;
302// if (results[0] != 0x96deff00aa010000L) { return 1; }
303// if (results[1] != 0xffffd5aa96deff00L) { return 2; }
304// if (results[2] != 0x0000d5aa96deff00L) { return 3; }
305// if (results[3] != 0xffff96deff000000L) { return 4; }
306// if (results.length != 4) { return 5; }
307//
308// return results[0]; // test return-long
309// }
310//
311// static int switchTest(int a) {
312// int res = 1234;
313//
314// switch (a) {
315// case -1: res = 1; return res;
316// case 0: res = 2; return res;
317// case 1: /*correct*/ break;
318// case 2: res = 3; return res;
319// case 3: res = 4; return res;
320// case 4: res = 5; return res;
321// default: res = 6; return res;
322// }
323// switch (a) {
324// case 3: res = 7; return res;
325// case 4: res = 8; return res;
326// default: /*correct*/ break;
327// }
328//
329// a = 0x12345678;
330//
331// switch (a) {
332// case 0x12345678: /*correct*/ break;
333// case 0x12345679: res = 9; return res;
334// default: res = 1; return res;
335// }
336// switch (a) {
337// case 57: res = 10; return res;
338// case -6: res = 11; return res;
339// case 0x12345678: /*correct*/ break;
340// case 22: res = 12; return res;
341// case 3: res = 13; return res;
342// default: res = 14; return res;
343// }
344// switch (a) {
345// case -6: res = 15; return res;
346// case 3: res = 16; return res;
347// default: /*correct*/ break;
348// }
349//
350// a = -5;
351// switch (a) {
352// case 12: res = 17; return res;
353// case -5: /*correct*/ break;
354// case 0: res = 18; return res;
355// default: res = 19; return res;
356// }
357//
358// switch (a) {
359// default: /*correct*/ break;
360// }
361// return res;
362// }
363// /*
364// * Test the integer comparisons in various ways.
365// */
366// static int testIntCompare(int minus, int plus, int plus2, int zero) {
367// int res = 1111;
368//
369// if (minus > plus)
370// return 1;
371// if (minus >= plus)
372// return 2;
373// if (plus < minus)
374// return 3;
375// if (plus <= minus)
376// return 4;
377// if (plus == minus)
378// return 5;
379// if (plus != plus2)
380// return 6;
381//
382// /* try a branch-taken */
383// if (plus != minus) {
384// res = res;
385// } else {
386// return 7;
387// }
388//
389// if (minus > 0)
390// return 8;
391// if (minus >= 0)
392// return 9;
393// if (plus < 0)
394// return 10;
395// if (plus <= 0)
396// return 11;
397// if (plus == 0)
398// return 12;
399// if (zero != 0)
400// return 13;
401//
402// if (zero == 0) {
403// res = res;
404// } else {
405// return 14;
406// }
407// return res;
408// }
409//
410// /*
411// * Test cmp-long.
412// *
413// * minus=-5, alsoMinus=0xFFFFFFFF00000009, plus=4, alsoPlus=8
414// */
415// static int testLongCompare(long minus, long alsoMinus, long plus,
416// long alsoPlus) {
417// int res = 2222;
418//
419// if (minus > plus)
420// return 2;
421// if (plus < minus)
422// return 3;
423// if (plus == minus)
424// return 4;
425//
426// if (plus >= plus+1)
427// return 5;
428// if (minus >= minus+1)
429// return 6;
430//
431// /* try a branch-taken */
432// if (plus != minus) {
433// res = res;
434// } else {
435// return 7;
436// }
437//
438// /* compare when high words are equal but low words differ */
439// if (plus > alsoPlus)
440// return 8;
441// if (alsoPlus < plus)
442// return 9;
443// if (alsoPlus == plus)
444// return 10;
445//
446// /* high words are equal, low words have apparently different signs */
447// if (minus < alsoMinus) // bug!
448// return 11;
449// if (alsoMinus > minus)
450// return 12;
451// if (alsoMinus == minus)
452// return 13;
453//
454// return res;
455// }
456//
457// /*
458// * Test cmpl-float and cmpg-float.
459// */
460// static int testFloatCompare(float minus, float plus, float plus2,
461// float nan) {
462//
463// int res = 3333;
464//
465// if (minus > plus)
466// res = 1;
467// if (plus < minus)
468// res = 2;
469// if (plus == minus)
470// res = 3;
471// if (plus != plus2)
472// res = 4;
473//
474// if (plus <= nan)
475// res = 5;
476// if (plus >= nan)
477// res = 6;
478// if (minus <= nan)
479// res = 7;
480// if (minus >= nan)
481// res = 8;
482// if (nan >= plus)
483// res = 9;
484// if (nan <= plus)
485// res = 10;
486//
487// if (nan == nan)
488// res = 11;
489//
490// return res;
491// }
492//
493// static int testDoubleCompare(double minus, double plus, double plus2,
494// double nan) {
495//
496// int res = 4444;
497//
498// if (minus > plus)
499// return 1;
500// if (plus < minus)
501// return 2;
502// if (plus == minus)
503// return 3;
504// if (plus != plus2)
505// return 4;
506//
507// if (plus <= nan)
508// return 5;
509// if (plus >= nan)
510// return 6;
511// if (minus <= nan)
512// return 7;
513// if (minus >= nan)
514// return 8;
515// if (nan >= plus)
516// return 9;
517// if (nan <= plus)
518// return 10;
519//
520// if (nan == nan)
521// return 11;
522// return res;
523// }
524//
525//
526// public static void main(String[] args) {
527// int res = unopTest(38);
528// if (res == 37) {
529// System.out.printf("unopTest PASSED\n");
530// } else {
531// System.out.printf("unopTest FAILED: %d\n", res);
532// }
533// res = shiftTest1();
534// if (res == 0) {
535// System.out.printf("shiftTest1 PASSED\n");
536// } else {
537// System.out.printf("shiftTest1 FAILED: %d\n", res);
538// }
539// res = shiftTest2();
540// if (res == 0) {
541// System.out.printf("shiftTest2 PASSED\n");
542// } else {
543// System.out.printf("shiftTest2 FAILED: %d\n", res);
544// }
545// res = unsignedShiftTest();
546// if (res == 0) {
547// System.out.printf("unsignedShiftTest PASSED\n");
548// } else {
549// System.out.printf("unsignedShiftTest FAILED: %d\n", res);
550// }
551// res = convTest();
552// if (res == 0) {
553// System.out.printf("convTest PASSED\n");
554// } else {
555// System.out.printf("convTest FAILED: %d\n", res);
556// }
557// res = charSubTest();
558// if (res == 0) {
559// System.out.printf("charSubTest PASSED\n");
560// } else {
561// System.out.printf("charSubTest FAILED: %d\n", res);
562// }
563// res = intOperTest(70000, -3);
564// if (res == 0) {
565// System.out.printf("intOperTest PASSED\n");
566// } else {
567// System.out.printf("intOperTest FAILED: %d\n", res);
568// }
569// res = longOperTest(70000000000L, -3L);
570// if (res == 0) {
571// System.out.printf("longOperTest PASSED\n");
572// } else {
573// System.out.printf("longOperTest FAILED: %d\n", res);
574// }
575// long lres = longShiftTest(0xd5aa96deff00aa01L, 16);
576// if (lres == 0x96deff00aa010000L) {
577// System.out.printf("longShiftTest PASSED\n");
578// } else {
579// System.out.printf("longShiftTest FAILED: %d\n", res);
580// }
581//
582// res = switchTest(1);
583// if (res == 1234) {
584// System.out.printf("switchTest PASSED\n");
585// } else {
586// System.out.printf("switchTest FAILED: %d\n", res);
587// }
588//
589// res = testIntCompare(-5, 4, 4, 0);
590// if (res == 1111) {
591// System.out.printf("testIntCompare PASSED\n");
592// } else {
593// System.out.printf("testIntCompare FAILED: %d\n", res);
594// }
595//
596// res = testLongCompare(-5L, -4294967287L, 4L, 8L);
597// if (res == 2222) {
598// System.out.printf("testLongCompare PASSED\n");
599// } else {
600// System.out.printf("testLongCompare FAILED: %d\n", res);
601// }
602//
603// res = testFloatCompare(-5.0f, 4.0f, 4.0f, (1.0f/0.0f) / (1.0f/0.0f));
604// if (res == 3333) {
605// System.out.printf("testFloatCompare PASSED\n");
606// } else {
607// System.out.printf("testFloatCompare FAILED: %d\n", res);
608// }
609//
610// res = testDoubleCompare(-5.0, 4.0, 4.0, (1.0/0.0) / (1.0/0.0));
611// if (res == 4444) {
612// System.out.printf("testDoubleCompare PASSED\n");
613// } else {
614// System.out.printf("testDoubleCompare FAILED: %d\n", res);
615// }
616// }
617//}
618static const char kIntMathDex[] =
619 "ZGV4CjAzNQA6SlSLdo8mIHPp83OcIPmcKOauGDHMXglYHQAAcAAAAHhWNBIAAAAAAAAAALgcAABO"
620 "AAAAcAAAAA8AAACoAQAADQAAAOQBAAABAAAAgAIAABYAAACIAgAAAgAAADgDAADgGQAAeAMAAFoV"
621 "AABiFQAAZRUAAGgVAABrFQAAchUAAHkVAAB9FQAAghUAAIkVAACOFQAAlRUAAKMVAACmFQAAqxUA"
622 "AK8VAAC6FQAAvxUAANYVAADrFQAA/xUAABMWAAAnFgAANBYAADcWAAA7FgAAPxYAAEMWAABYFgAA"
623 "bRYAAHoWAACTFgAAqBYAALIWAADIFgAA2hYAAOcWAAAAFwAAFRcAACMXAAAuFwAAOBcAAEYXAABg"
624 "FwAAdhcAAIUXAACgFwAAtxcAAL0XAADCFwAAyhcAANYXAADuFwAAAhgAAA4YAAAmGAAAOhgAAEYY"
625 "AABeGAAAchgAAIUYAACkGAAAvxgAANEYAADvGAAACRkAABkZAAA1GQAATRkAAF4ZAAB7GQAAlBkA"
626 "AJ4ZAAC0GQAAxhkAANkZAAD4GQAAExoAAAEAAAACAAAAAwAAAAwAAAAPAAAAEQAAABIAAAATAAAA"
627 "FAAAABUAAAAXAAAAGQAAABoAAAAbAAAAHAAAAAMAAAACAAAAAAAAAAQAAAACAAAA/BQAAAUAAAAC"
628 "AAAACBUAAAYAAAACAAAAFBUAAAcAAAACAAAAHBUAAAgAAAACAAAAJBUAAAkAAAACAAAAMBUAAAoA"
629 "AAACAAAAOBUAAA0AAAADAAAARBUAABAAAAAFAAAATBUAAA4AAAAGAAAAFBUAABcAAAAKAAAAAAAA"
630 "ABgAAAAKAAAAVBUAAAkABQAwAAAABAALAAAAAAAEAAAAHQAAAAQAAAAgAAAABAAEACMAAAAEAAQA"
631 "JgAAAAQAAwAnAAAABAADACgAAAAEAAYAKQAAAAQACAAsAAAABAAMAC8AAAAEAAAAMgAAAAQAAAA1"
632 "AAAABAADADgAAAAEAAEAOwAAAAQAAgA+AAAABAAFAEEAAAAEAAcARAAAAAQAAwBHAAAABAAAAEoA"
633 "AAAFAAkAMQAAAAYACgBNAAAABwALAAAAAAAHAAAAAQAAAP////8AAAAAFgAAAAAAAABbHAAAAAAA"
634 "AAQAAAAAAAAABwAAAAAAAAALAAAAAAAAAGUcAAAAAAAAAQABAAAAAAAcGgAAAQAAAA4AAAABAAEA"
635 "AQAAACEaAAAEAAAAcBAVAAAADgABAAAAAAAAACYaAAACAAAAEgAPAAQAAAAAAAAAKxoAADIAAAAT"
636 "AOYdgQAWAuYdMQAAAjgABAASEA8AEwAa4oEAFgIa4jEAAAI4AAQAEiAo9RgA9QB+UgEAAACEABQB"
637 "9QB+UjIQBAASMCjoGAAL/4Gt/v///4QAFAEL/4GtMhAEABJAKNsSACjZCwACAAAAAABBGgAArwAA"
638 "ABIyEiESBBJTEhATBQoAI1ULAJAGCQpLBgUEkQYJCksGBQCSBgkKSwYFAZIGCQlLBgUCEkaTBwkK"
639 "SwcFBnumlAYJBksGBQMSZpUHCQpLBwUGEnaWBwkKSwcFBhMGCACXBwkKSwcFBhMGCQCQBwkKsaey"
640 "p7OntKe1p7ant6ewl0sHBQYVBgCARAcFA3t3FQgAgLN4kwcIBzJnAwAPAEQGBQQUB20RAQAydgQA"
641 "ARAo90QGBQAUB3MRAQAydgQAASAo7kQBBQEUBrDL/P8yYQQAEkAo5UQBBQIUAgARECQyIQQAATAo"
642 "3BJBRAEFARMC26QyIQQAEmAo00QBBQMyAQQAEnAozRJgRAAFABQBcBEBADIQBQATAAgAKMIScEQA"
643 "BQAS0TIQBQATAAkAKLkTAAgARAAFABQBje7+/zIQBQATAAoAKK0TAAkARAAFABQBcBEBADIQBQAT"
644 "AAsAKKEBQCifAAAKAAIAAAAAAGYaAAA/AAAAEkMSMhIhEhASBCM1CwCYBggJSwYFBJkGCAlLBgUA"
645 "mgYICUsGBQGYBggJuZa6lriWSwYFAkQGBQQUBwABqgAydgMADwBEAAUAFAaqAP//MmAEAAEQKPdE"
646 "AAUBFAGqAP8AMhAEAAEgKO5EAAUCFAEAqgAAMhAEAAEwKOUBQCjjAAAJAAEAAAAAAHgaAAB1AAAA"
647 "EkMSMhIhEhASBBMFCAAjVQsA0IboA0sGBQTRhugDSwYFANKG6ANLBgUB04boA0sGBQLUhugDSwYF"
648 "AxJW1YfoA0sHBQYSZtaHGPxLBwUGEnbXhxj8SwcFBkQGBQQUB7kzAQAydgMADwBEAAUAFAYX1P7/"
649 "MmAEAAEQKPdEAAUBFAFoyKIEMhAEAAEgKO5EAAUCEwFNADIQBAABMCjmRAAFAxMBCQMyEAQAElAo"
650 "3hJQRAAFABMBwAMyEAQAEmAo1RJgRAAFABMB2f8yEAQAEnAozBJwRAAFABQBydP+/zIQBQATAAgA"
651 "KMEBQCi/AAAJAAEAAAAAAJMaAAB0AAAAEkISMRIgEhcSAxMECAAjRAsA2AUICksFBAPZBQgKSwUE"
652 "B9oFCApLBQQA2wUICksFBAHcBQgKSwUEAhJV3QYICksGBAUSZd4GCPZLBgQFEnXfBgj2SwYEBUQF"
653 "BAMUBgcn//8yZQMADwBEBQQHFAYN2QAAMmUEAAEQKPdEAAQAFAXihff/MlAEAAEgKO5EAAQBEwFN"
654 "6jIQBAASUCjmRAAEAhKxMhAEABJgKN8SUEQABAATAQgAMhAEABJwKNYSYEQABAAS8TIQBQATAAgA"
655 "KM0ScEQABAAUAQvZAAAyEAUAEwAJACjCATAowA0ABAAAAAAArhoAAO8AAAATAAoAIwAMABIBmwIJ"
656 "C0wCAAESEZwCCQtMAgABEiGdAgkLTAIAARIxnQIJCUwCAAESQZ4CCQtMAgABElF9sp8CCQJMAgAB"
657 "EmGgAgkLTAIAARJxoQIJC0wCAAETAQgAogIJC0wCAAETAQkAmwIJC7yyvbK+sr+ywLLBssKyu5JM"
658 "AgABGQEAgBJTRQMAA30zFgUBAJsHAQWcBQcFvjWeAwUDMQEDATgBBAASEA8AEgFFAQABGAP9O1NM"
659 "EAAAADEBAQM4AQQAEiAo8hIRRQEAARgDAzxTTBAAAAAxAQEDOAEEABIwKOQSIUUBAAEYAwBMBhvP"
660 "////MQEBAzgBBAASQCjWEjFFAQABGAMAABD2rwYpoTEBAQM4AQQAElAoyBJBRQEAARgDq5Y5kfr/"
661 "//8xAQEDOAEEABJgKLoSUUUBAAEWAwEAMQEBAzgBBAAScCivEmFFAQABGAMAPFNMEAAAADEBAQM4"
662 "AQUAEwAIACigEnFFAQABFgP9/zEBAQM4AQUAEwAJACiUEwEIAEUBAAEYA/3DrLPv////MQEBAzgB"
663 "BQATAAoAKIQTAQkARQEAARgDADxTTBAAAAAxAQEDOAEGABMACwApAHT/IQATAQoAMhAGABMADAAp"
664 "AGv/EgApAGj/AAANAAMAAAAAANgaAABbAAAAEkkSOBInEhYSBSOQDACjAQoMTAEABaQBCgxMAQAG"
665 "pQEKDEwBAAejAQoMxMHFwcPBTAEACEUBAAUYAwAAAaoA/96WMQEBAzgBBQAWAAEAEABFAQAGGAMA"
666 "/96WqtX//zEBAQM4AQUAFgACACjyRQEABxgDAP/elqrVAAAxAQEDOAEFABYAAwAo5EUBAAgYAwAA"
667 "AP/elv//MQEBAzgBBQAWAAQAKNYhATKRBQAWAAUAKNBFAAAFKM0AAA4AAQAIAAAA7RoAAAUCAAAS"
668 "RRUMgEAZChBAEhkSCBMAJgBxEBEAAAAKABMBJQAzEAgBYgAAABoBSQAjgg0AbjATABACcQAKAAAA"
669 "CgA5AAoBYgAAABoBNAAjgg0AbjATABACcQALAAAACgA5AAwBYgAAABoBNwAjgg0AbjATABACcQAS"
670 "AAAACgA5AA4BYgAAABoBTAAjgg0AbjATABACcQACAAAACgA5ABABYgAAABoBIgAjgg0AbjATABAC"
671 "cQABAAAACgA5ABIBYgAAABoBHwAjgg0AbjATABACFABwEQEAEtFxIAMAEAAKADkAEAFiAAAAGgEl"
672 "ACOCDQBuMBMAEAIYAAA8U0wQAAAAFgL9/3FABwAQMgoAOQALAWIBAAAaAisAI4MNAG4wEwAhAxgB"
673 "AaoA/96WqtUTAxAAcTAIACEDCwEYAwAAAaoA/96WMQEBAzkB/wBiAAAAGgEuACOCDQBuMBMAEAJx"
674 "EAwACQAKABMB0gQzEP8AYgAAABoBOgAjgg0AbjATABACErBxQA8AUIUKABMBVwQzEP4AYgAAABoB"
675 "QwAjgg0AbjATABACFgD7/xgCCQAAAP////8WBAQAFgYIAHcIEAAAAAoAEwGuCDMQ8wBiAAAAGgFG"
676 "ACOCDQBuMBMAEAIVAKDAFQHAf3FADgDAHAoAEwEFDTMQ7wBiAAAAGgFAACOCDQBuMBMAEAIZABTA"
677 "GQb4fwSiBKR3CA0AAAAKABMBXBEzEOkAYgAAABoBPQAjgg0AbjATABACDgBiAQAAGgJIACOTDQBx"
678 "EBQAAAAMAE0AAwhuMBMAIQMpAPT+YgEAABoCMwAjkw0AcRAUAAAADABNAAMIbjATACEDKQDy/mIB"
679 "AAAaAjYAI5MNAHEQFAAAAAwATQADCG4wEwAhAykA8P5iAQAAGgJLACOTDQBxEBQAAAAMAE0AAwhu"
680 "MBMAIQMpAO7+YgEAABoCIQAjkw0AcRAUAAAADABNAAMIbjATACEDKQDs/mIBAAAaAh4AI5MNAHEQ"
681 "FAAAAAwATQADCG4wEwAhAykA6v5iAQAAGgIkACOTDQBxEBQAAAAMAE0AAwhuMBMAIQMpAOz+YgEA"
682 "ABoCKgAjkw0AcRAUAAAADARNBAMIbjATACEDKQDx/mIBAAAaAi0AI5MNAHEQFAAAAAwATQADCG4w"
683 "EwAhAykA/f5iAQAAGgI5ACOTDQBxEBQAAAAMAE0AAwhuMBMAIQMpAP3+YgEAABoCQgAjkw0AcRAU"
684 "AAAADABNAAMIbjATACEDKQD+/mIBAAAaAkUAI5MNAHEQFAAAAAwATQADCG4wEwAhAykACf9iAQAA"
685 "GgI/ACOTDQBxEBQAAAAMAE0AAwhuMBMAIQMpAA3/YgEAABoCPAAjkw0AcRAUAAAADABNAAMIbjAT"
686 "ACEDKQAT/wAADQAAAAAAAABJGwAAqAAAABJDEjISIRIQEgQTBQgAI1ULACYFiwAAAEQGBQREBwUA"
687 "4AcHCLZ2RAcFAeAHBxC2dkQHBQLgBwcYtnZEBwUDElhECAUI4AgICLaHEmhECAUI4AgIELaHEnhE"
688 "CAUI4AgIGLaHgWiBehMMIADDysGoFAoRIjNEMqYDAA8AFAaImaq7MmcEAAEQKPkYBhEiM0SImaq7"
689 "MQYIBjgGBAABICjuRAYFBIFmRAAFAIEIEwAIAMMIwYZEAAUBgQATCBAAw4DBYEQCBQKBJhMCGADD"
690 "JsFgRAIFA4EmEwIgAMMmwWASUkQCBQKBJhMCKADDJsFgEmJEAgUCgSYTAjAAwybBYBJyRAIFAoEl"
691 "EwI4AMMlwVAYBREiM0SImaq7MQAABTgABAABMCisAUAoqgAAAAMEAAgAAAARAAAAIgAAADMAAABE"
692 "AAAAiAAAAJkAAACqAAAAuwAAABEAAAAAAAAAZRsAAEAAAAAWABEAFgIiABYEMwAWBkQAFghVABYK"
693 "ZgAWDHcAFg6IABMQOACjAAAQExAwAKMCAhDBIBMCKACjAgQCwSATAiAAowIGAsEgEwIYAKMCCALB"
694 "IBMCEACjAgoCwSATAggAowIMAsEgweAYAoh3ZlVEMyIRMQAAAjgABAASEA8AEgAo/gQAAQAAAAAA"
695 "dhsAAJoAAAASEBMB0gQrA0kAAAASYA8AEiAo/hIwKPwSQCj6ElAo+CsDTAAAABQCeFY0EisCTgAA"
696 "ACjuLAJSAAAAEwAOACjoEnAo5hMACAAo4xMACQAo4BMACgAo3RMACwAo2hMADAAo1xMADQAo1CwC"
697 "TgAAABKwLABUAAAAEwATACjKEwAPACjHEwAQACjEEwARACjBEwASACi+ARAovAABBgD/////BAAA"
698 "AAUAAAANAAAABwAAAAkAAAALAAAAAAECAAMAAAAQAAAAEgAAAAABAgB4VjQSBAAAAA8AAAAAAgUA"
699 "+v///wMAAAAWAAAAOQAAAHhWNBIRAAAAFwAAABQAAAAOAAAAGgAAAAACAgD6////AwAAAAoAAAAN"
700 "AAAAAAIDAPv///8AAAAADAAAABIAAAAPAAAADAAAAAoACAAAAAAArRsAAEgAAAATAFwRLwECBD0B"
701 "BAASEA8AMAEEAjsBBAASICj6LwEEAjkBBAASMCj0LwEEBjgBBAASQCjuMAEECDwBBAASUCjoLwEE"
702 "CDoBBAASYCjiMAECCDwBBAAScCjcLwECCDoBBQATAAgAKNUvAQgEOgEFABMACQAozjABCAQ8AQUA"
703 "EwAKACjHLwEICDkBxP8TAAsAKMAGAAQAAAAAANIbAAA+AAAAEwAFDS0BAgM9AQMAEhAuAQMCOwED"
704 "ABIgLQEDAjkBAwASMC0BAwQ4AQMAEkAuAQMFPAEDABJQLQEDBToBAwASYC4BAgU8AQMAEnAtAQIF"
705 "OgEEABMACAAtAQUDOgEEABMACQAuAQUDPAEEABMACgAtAQUFOQEEABMACwAPAAUABAAAAAAA8xsA"
706 "AEEAAAATAFcENyEEABIQDwA0IQQAEiAo/DUSBAASMCj4NhIEABJAKPQzEgQAElAo8DIyBAASYCjs"
707 "MhIHAD0BBwATAAgAKOUScCjjOgEFABMACQAo3jsCBQATAAoAKNk8AgUAEwALACjUOQIFABMADAAo"
708 "zzgEBQATAA0AKMo4BMn/EwAOACjFAAANAAgAAAAAAB4cAABWAAAAFgMBABMArggxAQUJPQEEABIg"
709 "DwAxAQkFOwEEABIwKPoxAQkFOQEEABJAKPSbAQkDMQEJAToBBAASUCjsmwEFAzEBBQE6AQQAEmAo"
710 "5DEBCQU4AQkAMQEJCz0BBwATAAgAKNkScCjXMQELCTsBBQATAAkAKNAxAQsJOQEFABMACgAoyTEB"
711 "BQc7AQUAEwALACjCMQEHBT0BBQATAAwAKLsxAQcFOQG4/xMADQAotAIAAQAAAAAARxwAAAQAAAB7"
712 "EN8AAP8PAAUAAAAAAAAATxwAABcAAAAUAf///w8TBP8PEvONEI8RjkIyMAQAEhAPADIxBAASICj8"
713 "MkIEABIwKPgSACj2AAAEAAAAAAAAAAAAAAAEAAAAAQABAAEAAQABAAAAAgAAAAIAAAACAAIABAAA"
714 "AAIAAgACAAIAAgAAAAMAAwAEAAAAAwADAAMAAwACAAAAAwACAAIAAAAIAA0AAQAAAA4ABjxpbml0"
715 "PgABRAABRgABSQAFSUREREQABUlGRkZGAAJJSQADSUlJAAVJSUlJSQADSUpKAAVJSkpKSgAMSW50"
716 "TWF0aC5qYXZhAAFKAANKSkkAAkxJAAlMSW50TWF0aDsAA0xMTAAVTGphdmEvaW8vUHJpbnRTdHJl"
717 "YW07ABNMamF2YS9sYW5nL0ludGVnZXI7ABJMamF2YS9sYW5nL09iamVjdDsAEkxqYXZhL2xhbmcv"
718 "U3RyaW5nOwASTGphdmEvbGFuZy9TeXN0ZW07AAtPYmplY3QuamF2YQABVgACVkwAAltJAAJbSgAT"
719 "W0xqYXZhL2xhbmcvT2JqZWN0OwATW0xqYXZhL2xhbmcvU3RyaW5nOwALY2hhclN1YlRlc3QAF2No"
720 "YXJTdWJUZXN0IEZBSUxFRDogJWQKABNjaGFyU3ViVGVzdCBQQVNTRUQKAAhjb252VGVzdAAUY29u"
721 "dlRlc3QgRkFJTEVEOiAlZAoAEGNvbnZUZXN0IFBBU1NFRAoAC2ludE9wZXJUZXN0ABdpbnRPcGVy"
722 "VGVzdCBGQUlMRUQ6ICVkCgATaW50T3BlclRlc3QgUEFTU0VECgAMaW50U2hpZnRUZXN0AAlsaXQx"
723 "NlRlc3QACGxpdDhUZXN0AAxsb25nT3BlclRlc3QAGGxvbmdPcGVyVGVzdCBGQUlMRUQ6ICVkCgAU"
724 "bG9uZ09wZXJUZXN0IFBBU1NFRAoADWxvbmdTaGlmdFRlc3QAGWxvbmdTaGlmdFRlc3QgRkFJTEVE"
725 "OiAlZAoAFWxvbmdTaGlmdFRlc3QgUEFTU0VECgAEbWFpbgADb3V0AAZwcmludGYACnNoaWZ0VGVz"
726 "dDEAFnNoaWZ0VGVzdDEgRkFJTEVEOiAlZAoAEnNoaWZ0VGVzdDEgUEFTU0VECgAKc2hpZnRUZXN0"
727 "MgAWc2hpZnRUZXN0MiBGQUlMRUQ6ICVkCgASc2hpZnRUZXN0MiBQQVNTRUQKAApzd2l0Y2hUZXN0"
728 "ABZzd2l0Y2hUZXN0IEZBSUxFRDogJWQKABJzd2l0Y2hUZXN0IFBBU1NFRAoAEXRlc3REb3VibGVD"
729 "b21wYXJlAB10ZXN0RG91YmxlQ29tcGFyZSBGQUlMRUQ6ICVkCgAZdGVzdERvdWJsZUNvbXBhcmUg"
730 "UEFTU0VECgAQdGVzdEZsb2F0Q29tcGFyZQAcdGVzdEZsb2F0Q29tcGFyZSBGQUlMRUQ6ICVkCgAY"
731 "dGVzdEZsb2F0Q29tcGFyZSBQQVNTRUQKAA50ZXN0SW50Q29tcGFyZQAadGVzdEludENvbXBhcmUg"
732 "RkFJTEVEOiAlZAoAFnRlc3RJbnRDb21wYXJlIFBBU1NFRAoAD3Rlc3RMb25nQ29tcGFyZQAbdGVz"
733 "dExvbmdDb21wYXJlIEZBSUxFRDogJWQKABd0ZXN0TG9uZ0NvbXBhcmUgUEFTU0VECgAIdW5vcFRl"
734 "c3QAFHVub3BUZXN0IEZBSUxFRDogJWQKABB1bm9wVGVzdCBQQVNTRUQKABF1bnNpZ25lZFNoaWZ0"
735 "VGVzdAAddW5zaWduZWRTaGlmdFRlc3QgRkFJTEVEOiAlZAoAGXVuc2lnbmVkU2hpZnRUZXN0IFBB"
736 "U1NFRAoAB3ZhbHVlT2YAAwAHDgABAAcOAHAABw4AVAAHDi0eAg53AnQdLR6JWh55Wh54AHgCAAAH"
737 "WU1LS0tLWlpaWmvjLT1bAgwsAnUdlpaWlpZptJbD0wDcAQIAAAdZLUtLS3h7GpaWpQCiAQEAB1lN"
738 "S0tLS0taWlt/AnkdlpaHh5aWwwC+AQEAB1lNS0tLS0taWl1/AnkdlpaHeJaWwwDtAQIAAAcOTVpa"
739 "WlpaaVpaauItSy14AgxZAnUd4eHh4eG08MP/AREPlgCTAgIAAAdZLUtLS3jXAnsd4eHhagD5AwEA"
740 "B3dpS5lLLZlLLZlLLZlLLZlLLZmHLZm0LZm0lppLS5paS5rwS5qHS5qlS5kCq38dAREUAREUAREU"
741 "AREUAREUAREUAREUAREUAREVAREVAREVAREVAREVAA0AB1l9AREPARQPagIOWQJzHXi1ATcXwwJo"
742 "HQAqAAcOLS0tLS0tLS4BIxGlAKICAQAHHS5CAigdAlMdLi0tL0E9T0ECbjstQz88PTw+QR4/AnY7"
743 "PEE9UQJRHQEQF46LARYWqwDaAwQAAAAABw4uSwIXHQJqHUstSy1LLkstSy1LLUs8SzxLPUsAuQME"
744 "AAAAAAcOLkseSx5LHksfSx5LHkseSy1LLUsuSy4A2QIEAAAAAAcOLi0CJR0CXB0tLS0tLS0tLS0v"
745 "Mi03MS08LTwtPC08LT0vAIsDBAAAAAAHLC5LAiIdAl8dSy1LLmktaS9RSwJ7OzJLPEs+SzxLPEsA"
746 "BwEABw4eLQBAAAdoHh4gPxpLTAAAAAEAFYGABPgGAAATAACAgASMBwEIpAcBCLgHAQisCAEInAsB"
747 "CKwMAQioDgEIoBABCJAUAQnYFQEI9B0BCNQgAQjkIQEIqCQBCMglAQjUJgEI6CcBCKQpAQi8KQAN"
748 "AAAAAAAAAAEAAAAAAAAAAQAAAE4AAABwAAAAAgAAAA8AAACoAQAAAwAAAA0AAADkAQAABAAAAAEA"
749 "AACAAgAABQAAABYAAACIAgAABgAAAAIAAAA4AwAAASAAABQAAAB4AwAAARAAAAoAAAD8FAAAAiAA"
750 "AE4AAABaFQAAAyAAABQAAAAcGgAAACAAAAIAAABbHAAAABAAAAEAAAC4HAAA";
751} // namespace art