From b602aabea10901c407682d2afe3c53ec80b47263 Mon Sep 17 00:00:00 2001 From: crc Date: Wed, 30 Jan 2019 01:42:25 +0000 Subject: [PATCH] add retro-extend written in retro FossilOrigin-Name: 454964c4c38d225882f00a27d4902a6ba18ef4489ce551942ee2814b079f6381 --- Makefile | 2 +- RELEASE_NOTES.md | 1 + interfaces/ri_image.c | 1034 +++++++++++++++++++------------------- tools/retro-extend.forth | 249 +++++++++ 4 files changed, 768 insertions(+), 518 deletions(-) create mode 100755 tools/retro-extend.forth diff --git a/Makefile b/Makefile index 2a72f79..b61fd28 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ RIIO ?= io/filesystem.o io/floatingpoint.o io/gopher.o io/unix.o all: build -build: dirs bin/retro-embedimage bin/retro-extend bin/retro-injectimage-js bin/retro-muri bin/RETRO12.html bin/retro bin/retro-repl bin/retro-unu +build: dirs bin/retro-embedimage bin/retro-extend bin/retro-injectimage-js bin/retro-muri bin/RETRO12.html bin/retro bin/retro-ri bin/retro-repl bin/retro-unu dirs: mkdir -p bin diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 1d99742..6db17a7 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -91,6 +91,7 @@ - add net_fetch.forth - add paste.forth - add Paste_to_Sprunge.forth +- add retro-extend.forth - add Save_and_Restore_Stack.forth - add share.forth and shared.forth - add uuencode.forth diff --git a/interfaces/ri_image.c b/interfaces/ri_image.c index d659d99..a5a8fff 100644 --- a/interfaces/ri_image.c +++ b/interfaces/ri_image.c @@ -1,6 +1,6 @@ #include -int32_t ngaImageCells = 13528; -int32_t ngaImage[] = { 1793,-1,13519,13527,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,10, +int32_t ngaImageCells = 13531; +int32_t ngaImage[] = { 1793,-1,13522,13530,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,10, 7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10, 17,10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,26,10, 68223234,1,2575,85000450,1,656912,355,339,268505089,66,65,135205121,66,10,101384453,0,9,10,2049,59, @@ -126,510 +126,510 @@ int32_t ngaImage[] = { 1793,-1,13519,13527,201906,0,10,1,10,2,10,3,10,4,10,5,10, 1,2457,2049,2065,22,10,2443,2474,147,103,116,101,113,63,0,2049,2055,11,1793,2481, 14,10,1,2479,2049,2065,22,10,2465,2494,147,105,102,59,0,67502597,1793,2499,9,10, 1,2497,2049,2065,25,6,771,10,2487,2515,147,45,105,102,59,0,67502597,1793,2521,2049, - 73,10,1,2518,2049,2065,25,6,771,10,2507,2538,147,110,58,77,65,88,0,1, - 2147483647,10,2529,2550,147,110,58,77,73,78,0,1,-2147483648,10,2541,2564,147,110,58,122, - 101,114,111,63,0,1,0,11,10,2553,2580,147,110,58,45,122,101,114,111,63, - 0,1,0,12,10,2568,2599,147,110,58,110,101,103,97,116,105,118,101,63,0, - 1,0,13,10,2584,2618,147,110,58,112,111,115,105,116,105,118,101,63,0,1, - -1,14,10,2603,2646,147,110,58,115,116,114,105,99,116,108,121,45,112,111,115, - 105,116,105,118,101,63,0,1,0,14,10,2622,2661,147,110,58,101,118,101,110, - 63,0,1,2,20,3,2049,2564,10,2650,2678,147,110,58,111,100,100,63,0,1, - 2,20,3,2049,2580,10,2668,2692,153,114,111,116,0,67503109,10,2685,2699,153,47,0, - 197652,10,2694,2708,153,109,111,100,0,788,10,2701,2717,147,110,111,116,0,1,-1, - 23,10,2710,2730,147,110,58,112,111,119,0,1,1,4,1793,2738,67502597,19,10,1, - 2735,2049,2252,772,10,2721,2756,147,110,58,110,101,103,97,116,101,0,1,-1,19, - 10,2744,2772,147,110,58,115,113,117,97,114,101,0,2,19,10,2760,2785,147,110, - 58,115,113,114,116,0,1,1,1793,2803,2049,2055,197652,67502597,18,1,2,197652,25,17, - 1,2789,7,10,1,2789,8,772,10,2775,2817,147,110,58,109,105,110,0,2049,2055, - 13,1793,2824,3,10,1,2822,1793,2830,772,10,1,2828,2049,67,10,2808,2844,147,110, - 58,109,97,120,0,2049,2055,14,1793,2851,3,10,1,2849,1793,2857,772,10,1,2855, - 2049,67,10,2835,2871,147,110,58,97,98,115,0,2,2049,2756,2049,2844,10,2862,2888, - 147,110,58,108,105,109,105,116,0,4,5,2049,2817,6,2049,2844,10,2877,2905,147, - 110,58,105,110,99,0,1,1,17,10,2896,2918,147,110,58,100,101,99,0,1, - 1,18,10,2909,2936,147,110,58,98,101,116,119,101,101,110,63,0,67503109,1793,2944, - 67503109,67503109,2049,2888,10,1,2939,2049,2077,11,10,2922,2962,147,118,58,105,110,99,45, - 98,121,0,1793,2967,15,17,10,1,2964,2049,2077,16,10,2950,2985,147,118,58,100, - 101,99,45,98,121,0,1793,2991,15,4,18,10,1,2987,2049,2077,16,10,2973,3006, - 147,118,58,105,110,99,0,1,1,4,2049,2962,10,2997,3021,147,118,58,100,101, - 99,0,1,1,4,2049,2985,10,3012,3038,147,118,58,108,105,109,105,116,0,5, - 5,2,15,6,6,2049,2888,4,16,10,3027,3057,147,118,58,111,110,0,2049,2428, - 4,16,10,3049,3071,147,118,58,111,102,102,0,2049,2440,4,16,10,3062,3085,147, - 97,108,108,111,116,0,1,3,2049,2962,10,3076,3104,147,118,58,112,114,101,115, - 101,114,118,101,0,4,2,15,1793,3118,1793,3113,8,10,1,3111,2049,2065,10,1, - 3109,2049,2065,4,16,10,3090,3143,147,118,58,117,112,100,97,116,101,45,117,115, - 105,110,103,0,4,1793,3150,15,4,8,10,1,3146,2049,2077,16,10,3125,3164,147, - 99,111,112,121,0,1793,3173,1,59,2049,2065,2049,62,10,1,3166,2049,2252,3,3, - 10,3156,3193,147,83,99,111,112,101,76,105,115,116,0,12538,13381,10,3180,3202,147, - 123,123,0,2049,1570,2,1,3193,2049,62,16,10,3196,3227,147,45,45,45,114,101, - 118,101,97,108,45,45,45,0,2049,1570,1,3193,2049,2905,16,10,3211,3241,147,125, - 125,0,1,3193,2049,59,4,15,11,1793,3255,3841,3193,4097,2,10,1,3250,1793,3285, - 3841,3193,1793,3280,1,2,15,2,15,1,3193,2049,2905,15,12,25,3,1,3265,7, - 10,1,3263,8,16,10,1,3259,2049,67,10,3235,3300,134,66,117,102,102,101,114, - 0,0,10,3290,3309,134,80,116,114,0,0,10,3302,3324,147,116,101,114,109,105, - 110,97,116,101,0,1,0,3841,3309,16,10,3235,3346,147,98,117,102,102,101,114, - 58,115,116,97,114,116,0,3841,3300,10,3330,3363,147,98,117,102,102,101,114,58, - 101,110,100,0,3841,3309,10,3349,3380,147,98,117,102,102,101,114,58,97,100,100, - 0,2049,3363,16,1,3309,2049,3006,2049,3324,10,3366,3404,147,98,117,102,102,101,114, - 58,103,101,116,0,1,3309,2049,3021,2049,3363,15,2049,3324,10,3390,3430,147,98,117, - 102,102,101,114,58,101,109,112,116,121,0,2049,3346,4097,3309,2049,3324,10,3414,3452, - 147,98,117,102,102,101,114,58,115,105,122,101,0,2049,3363,2049,3346,18,10,3437, - 3472,147,98,117,102,102,101,114,58,115,101,116,0,4097,3300,2049,3430,10,3458,3496, - 147,98,117,102,102,101,114,58,112,114,101,115,101,114,118,101,0,3841,3300,3841, - 3309,1793,3513,1793,3506,8,10,1,3504,2049,2065,4097,3300,10,1,3502,2049,2065,4097,3309, - 10,3477,3535,134,84,101,109,112,83,116,114,105,110,103,115,0,32,3520,3553,134, - 84,101,109,112,83,116,114,105,110,103,77,97,120,0,512,3536,3565,147,83,84, - 82,73,78,71,83,0,2049,1543,3841,3535,3841,3553,19,18,10,3554,3585,134,67,117, - 114,114,101,110,116,0,21,10,3574,3600,147,115,58,112,111,105,110,116,101,114, - 0,3841,3585,3841,3553,19,2049,3565,17,10,3587,3619,147,115,58,110,101,120,116,0, - 1,3585,2049,3006,3841,3585,3841,3535,11,1793,3635,1,0,4097,3585,10,1,3630,9,10, - 3554,3649,147,115,58,116,101,109,112,0,2,2049,82,2049,2905,2049,3600,4,2049,3164, - 2049,3600,2049,3619,10,3639,3675,147,115,58,101,109,112,116,121,0,2049,3600,2049,3619, - 1,0,67502597,16,10,3664,3694,147,115,58,115,107,105,112,0,6,1793,3702,2049,59, - 2049,2580,10,1,3697,2049,2197,2049,2918,5,10,3684,3720,147,115,58,107,101,101,112, - 0,2049,1806,1793,3729,1,3694,2049,1765,10,1,3724,9,2049,1835,1793,3739,2049,122,10, - 1,3736,2049,2065,2049,134,10,3710,3758,159,112,114,101,102,105,120,58,39,0,2049, - 1806,1793,3765,2049,3720,10,1,3762,1793,3772,2049,3649,10,1,3769,2049,67,10,3746,3787, - 147,115,58,99,104,111,112,0,2049,3649,2,2049,82,67502597,17,2049,2918,1,0,4, - 16,10,3777,3814,147,115,58,114,101,118,101,114,115,101,0,1793,3856,2,2049,3649, - 2049,3472,1,82,1793,3832,2,2049,82,17,2049,2918,10,1,3825,2049,2092,4,1793,3846, - 2,15,2049,3380,2049,2918,10,1,3839,2049,2252,3,2049,3346,2049,3649,10,1,3816,2049, - 3496,10,3801,3876,147,115,58,116,114,105,109,45,108,101,102,116,0,2049,3649,1793, - 3901,2049,59,1793,3888,1,32,11,10,1,3884,1793,3895,2049,2580,10,1,3892,2049,2092, - 21,10,1,3880,2049,2197,2049,2918,10,3861,3924,147,115,58,116,114,105,109,45,114, - 105,103,104,116,0,2049,3649,2049,3814,2049,3876,2049,3814,10,3908,3943,147,115,58,116, - 114,105,109,0,2049,3924,2049,3876,10,3933,3961,147,115,58,112,114,101,112,101,110, - 100,0,2049,3649,1793,3985,2,2049,82,17,1793,3977,2,2049,82,2049,2905,10,1,3971, - 2049,2065,4,2049,3164,10,1,3965,2049,2077,10,3948,4002,147,115,58,97,112,112,101, - 110,100,0,4,2049,3961,10,3990,4020,147,115,58,102,111,114,45,101,97,99,104, - 0,1793,4060,67502597,15,25,3,2049,2055,1793,4043,1793,4038,1,35,2049,2065,8,10,1, - 4032,2049,2065,10,1,4030,2049,2065,1793,4052,2049,2905,10,1,4049,2049,2065,1,4022,7, - 10,1,4022,8,771,10,4006,4079,147,115,58,105,110,100,101,120,45,111,102,0, - 4,1793,4102,2049,59,25,4,1793,4091,67502597,12,10,1,4088,2049,2065,4,25,3,1, - 4082,7,10,1,4082,2049,2077,1793,4113,18,2049,2918,772,10,1,4108,2049,2077,2049,82, - 67502597,11,1793,4127,3,1,-1,10,1,4123,9,10,4065,4151,147,115,58,99,111,110, - 116,97,105,110,115,45,99,104,97,114,63,0,2049,4079,1,-1,12,10,4131,4164, - 134,83,114,99,0,0,4157,4172,134,84,97,114,0,0,4165,4180,134,80,97,100, - 0,0,4173,4186,134,73,0,0,4181,4192,134,70,0,0,4187,4199,134,65,116,0, - 0,4193,4213,147,116,101,114,109,105,110,97,116,101,0,1,0,3841,4180,3841,4172, - 2049,82,17,16,10,4200,4235,147,101,120,116,114,97,99,116,0,3841,4164,3841,4186, - 17,3841,4180,3841,4172,2049,82,2049,3164,10,4224,4260,147,99,111,109,112,97,114,101, - 0,3841,4180,3841,4172,2049,96,3841,4192,22,4097,4192,3841,4192,1793,4280,3841,4186,4097,4199, - 10,1,4275,2049,73,10,4249,4293,147,110,101,120,116,0,1,4186,2049,3006,10,4131, - 4320,147,115,58,99,111,110,116,97,105,110,115,45,115,116,114,105,110,103,63, - 0,4097,4172,4097,4164,2049,3675,4097,4180,1,0,4097,4186,1,0,4097,4192,3841,4164,2049, - 82,1793,4351,2049,4235,2049,4213,2049,4260,2049,4293,10,1,4342,2049,2252,3841,4192,10,4298, - 4379,147,115,58,105,110,100,101,120,45,111,102,45,115,116,114,105,110,103,0, - 4097,4172,4097,4164,2049,3675,4097,4180,1,0,4097,4186,1,0,4097,4192,1,-1,4097,4199, - 3841,4164,2049,82,1793,4414,2049,4235,2049,4213,2049,4260,2049,4293,10,1,4405,2049,2252,3841, - 4192,1793,4425,3841,4199,10,1,4422,1793,4432,1,-1,10,1,4429,2049,67,10,4358,4449, - 147,115,58,102,105,108,116,101,114,0,1793,4486,2049,3675,2049,3472,4,1793,4478,2049, - 2055,4,8,1793,4467,2049,3380,10,1,4464,1793,4473,3,10,1,4471,2049,67,10,1, - 4458,2049,4020,3,2049,3346,10,1,4451,2049,3496,10,4437,4500,147,115,58,109,97,112, - 0,1793,4522,2049,3675,2049,3472,4,1793,4514,67502597,8,2049,3380,10,1,4509,2049,4020,3, - 2049,3346,10,1,4502,2049,3496,10,4491,4539,147,115,58,115,117,98,115,116,114,0, - 1793,4545,17,2049,3675,10,1,4541,2049,2065,1793,4562,67502597,1793,4557,2049,3164,10,1,4554, - 2049,2065,10,1,4551,2049,2077,67502597,1793,4575,17,1,0,4,16,10,1,4569,2049,2065, - 10,4527,4591,147,115,58,114,105,103,104,116,0,67502597,2049,82,67502597,18,4,2049,4539, - 10,4580,4610,147,115,58,108,101,102,116,0,1,0,4,2049,4539,10,4600,4626,147, - 115,58,104,97,115,104,0,1,5381,4,1793,4637,4,1,33,19,17,10,1,4631, - 2049,4020,10,4616,4652,147,115,58,99,111,112,121,0,67502597,2049,82,2049,2905,2049,3164, - 10,4642,4672,147,115,58,68,73,71,73,84,83,0,2049,3694,48,49,50,51,52, - 53,54,55,56,57,0,1,4674,10,4660,4709,147,115,58,65,83,67,73,73,45, - 76,79,87,69,82,67,65,83,69,0,2049,3694,97,98,99,100,101,102,103,104, - 105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,0,1, - 4711,10,4688,4762,147,115,58,65,83,67,73,73,45,85,80,80,69,82,67,65, - 83,69,0,2049,3694,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 80,81,82,83,84,85,86,87,88,89,90,0,1,4764,10,4741,4813,147,115,58, - 65,83,67,73,73,45,76,69,84,84,69,82,83,0,2049,3694,97,98,99,100, - 101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120, - 121,122,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82, - 83,84,85,86,87,88,89,90,0,1,4815,10,4794,4888,147,115,58,80,85,78, - 67,84,85,65,84,73,79,78,0,2049,3694,95,33,34,35,36,37,38,39,40, - 41,42,43,44,45,46,47,58,59,60,61,62,63,64,91,92,93,94,96,123, - 124,125,126,0,1,4890,1,95,67502597,16,10,4871,4946,134,115,58,87,72,73,84, - 69,83,80,65,67,69,0,9,10,13,0,4930,0,134,65,83,67,73,73,58, - 78,85,76,0,4950,1,134,65,83,67,73,73,58,83,79,72,0,4963,2,134, - 65,83,67,73,73,58,83,84,88,0,4976,3,134,65,83,67,73,73,58,69, - 84,88,0,4989,4,134,65,83,67,73,73,58,69,79,84,0,5002,5,134,65, - 83,67,73,73,58,69,78,81,0,5015,6,134,65,83,67,73,73,58,65,67, - 75,0,5028,7,134,65,83,67,73,73,58,66,69,76,0,5041,8,134,65,83, - 67,73,73,58,66,83,0,5054,9,134,65,83,67,73,73,58,72,84,0,5066, - 10,134,65,83,67,73,73,58,76,70,0,5078,11,134,65,83,67,73,73,58, - 86,84,0,5090,12,134,65,83,67,73,73,58,70,70,0,5102,13,134,65,83, - 67,73,73,58,67,82,0,5114,14,134,65,83,67,73,73,58,83,79,0,5126, - 15,134,65,83,67,73,73,58,83,73,0,5138,16,134,65,83,67,73,73,58, - 68,76,69,0,5150,17,134,65,83,67,73,73,58,68,67,49,0,5163,18,134, - 65,83,67,73,73,58,68,67,50,0,5176,19,134,65,83,67,73,73,58,68, - 67,51,0,5189,20,134,65,83,67,73,73,58,68,67,52,0,5202,21,134,65, - 83,67,73,73,58,78,65,75,0,5215,22,134,65,83,67,73,73,58,83,89, - 78,0,5228,23,134,65,83,67,73,73,58,69,84,66,0,5241,24,134,65,83, - 67,73,73,58,67,65,78,0,5254,25,134,65,83,67,73,73,58,69,77,0, - 5267,26,134,65,83,67,73,73,58,83,85,66,0,5279,27,134,65,83,67,73, - 73,58,69,83,67,0,5292,28,134,65,83,67,73,73,58,70,83,0,5305,29, - 134,65,83,67,73,73,58,71,83,0,5317,30,134,65,83,67,73,73,58,82, - 83,0,5329,31,134,65,83,67,73,73,58,85,83,0,5341,32,134,65,83,67, - 73,73,58,83,80,65,67,69,0,5353,127,134,65,83,67,73,73,58,68,69, - 76,0,5368,5394,147,99,58,108,101,116,116,101,114,63,0,1,65,1,122,2049, - 2936,10,5381,5417,147,99,58,108,111,119,101,114,99,97,115,101,63,0,1,97, - 1,122,2049,2936,10,5401,5440,147,99,58,117,112,112,101,114,99,97,115,101,63, - 0,1,65,1,90,2049,2936,10,5424,5459,147,99,58,100,105,103,105,116,63,0, - 1,48,1,57,2049,2936,10,5447,5480,147,99,58,118,105,115,105,98,108,101,63, - 0,1,31,1,126,2049,2936,10,5466,5499,147,99,58,118,111,119,101,108,63,0, - 2049,3694,97,101,105,111,117,65,69,73,79,85,0,1,5501,4,2049,4151,10,5487, - 5534,147,99,58,99,111,110,115,111,110,97,110,116,63,0,2,2049,5394,1793,5544, - 2049,5499,2049,2717,10,1,5539,1793,5552,3,2049,2440,10,1,5548,2049,67,10,5518,5563, - 134,87,83,0,32,9,10,13,0,5518,5585,147,99,58,119,104,105,116,101,115, - 112,97,99,101,63,0,1,5563,4,2049,4151,10,5568,5608,147,99,58,45,108,111, - 119,101,114,99,97,115,101,63,0,2049,5417,2049,2717,10,5591,5630,147,99,58,45, - 117,112,112,101,114,99,97,115,101,63,0,2049,5440,2049,2717,10,5613,5648,147,99, - 58,45,100,105,103,105,116,63,0,2049,5459,2049,2717,10,5635,5671,147,99,58,45, - 119,104,105,116,101,115,112,97,99,101,63,0,2049,5585,2049,2717,10,5653,5691,147, - 99,58,45,118,105,115,105,98,108,101,63,0,2049,5480,2049,2717,10,5676,5709,147, - 99,58,45,118,111,119,101,108,63,0,2049,5499,2049,2717,10,5696,5731,147,99,58, - 45,99,111,110,115,111,110,97,110,116,63,0,2049,5534,2049,2717,10,5714,5750,147, - 99,58,116,111,45,117,112,112,101,114,0,2,2049,5417,25,3,1,32,18,10, - 5736,5773,147,99,58,116,111,45,108,111,119,101,114,0,2,2049,5440,25,3,1, - 32,17,10,5759,5797,147,99,58,116,111,45,115,116,114,105,110,103,0,2049,3694, - 46,0,1,5799,2049,3649,1793,5809,16,10,1,5807,2049,2077,10,5782,5831,147,99,58, - 116,111,103,103,108,101,45,99,97,115,101,0,2,2049,5417,1793,5839,2049,5750,10, - 1,5836,1793,5846,2049,5773,10,1,5843,2049,67,10,5814,5866,147,99,58,116,111,45, - 110,117,109,98,101,114,0,2,2049,5459,1793,5875,1,48,18,10,1,5871,1793,5883, - 3,1,0,10,1,5879,2049,67,10,5851,5902,147,115,58,116,111,45,117,112,112, - 101,114,0,1793,5907,2049,5750,10,1,5904,2049,4500,10,5888,5926,147,115,58,116,111, - 45,108,111,119,101,114,0,1793,5931,2049,5773,10,1,5928,2049,4500,10,5912,5945,134, - 86,97,108,117,101,0,0,5936,5957,147,99,111,114,114,101,99,116,0,2,1, - 48,13,1793,5972,1,48,67502597,18,1,2,19,17,10,1,5963,9,10,5912,5991,147, - 110,58,116,111,45,115,116,114,105,110,103,0,1793,6045,2049,1835,2049,3472,2,4097, - 5945,2049,2871,1793,6019,1,10,20,4,1,48,17,2049,5957,2049,3380,2,2049,2580,10, - 1,6004,2049,2197,3,3841,5945,2049,2599,1793,6035,1,45,2049,3380,10,1,6030,9,2049, - 3346,2049,3814,2049,3649,10,1,5993,2049,3496,10,5976,6072,134,82,101,119,114,105,116, - 101,85,110,100,101,114,115,99,111,114,101,115,0,-1,6050,6080,147,115,117,98, - 0,1,95,1793,6087,1,32,10,1,6084,2049,2282,10,6073,6103,147,114,101,119,114, - 105,116,101,0,3841,6072,1793,6112,1,6080,2049,4500,10,1,6107,9,1,3758,8,10, - 6050,6131,159,112,114,101,102,105,120,58,39,0,2049,6103,10,6119,6146,159,112,114, - 101,102,105,120,58,34,0,2049,6103,2049,3720,10,6134,6162,147,115,58,115,112,108, - 105,116,0,2049,2055,2049,4079,772,2049,2055,2049,4610,1793,6175,17,10,1,6173,2049,2065, - 10,6151,6201,147,115,58,115,112,108,105,116,45,111,110,45,115,116,114,105,110, - 103,0,2049,2055,2049,4379,2049,2905,772,2049,2055,2049,4610,1793,6216,17,10,1,6214,2049, - 2065,10,6180,6234,147,115,58,114,101,112,108,97,99,101,0,67502597,2049,82,2049,1835, - 16,1793,6250,2049,6201,4,2049,1835,15,17,10,1,6242,2049,2065,2049,3961,2049,4002,10, - 6221,6271,134,83,112,108,105,116,45,79,110,0,0,6259,6282,147,109,97,116,99, - 104,63,0,3841,6271,11,10,6272,6299,147,116,101,114,109,105,110,97,116,101,0, - 1,0,67502597,2049,2918,16,10,6286,6314,147,115,116,101,112,0,1793,6319,2049,2905,10, - 1,6316,2049,2065,2049,6282,1793,6333,2,2049,108,2049,6299,10,1,6327,9,10,6221,6351, - 147,115,58,116,111,107,101,110,105,122,101,0,4097,6271,2049,3720,2049,1835,1,0, - 2049,108,1793,6378,2,2049,108,2,1793,6372,2049,6314,10,1,6369,2049,4020,3,10,1, - 6363,2049,2065,2049,1835,67502597,18,2049,2918,67502597,16,10,6337,6401,134,84,111,107,101,110, - 115,0,0,6391,6412,134,78,101,101,100,108,101,0,0,6402,6424,147,45,109,97, - 116,99,104,63,0,2,3841,6412,2049,4320,10,6413,6444,147,115,97,118,101,45,116, - 111,107,101,110,0,3841,6412,2049,6201,2049,3720,2049,3380,2049,2905,10,6430,6472,147,116, - 111,107,101,110,115,45,116,111,45,115,101,116,0,2049,1835,3841,6401,2049,3452,2, - 2049,108,1793,6488,2049,59,2049,108,10,1,6483,2049,2252,3,10,6337,6518,147,115,58, - 116,111,107,101,110,105,122,101,45,111,110,45,115,116,114,105,110,103,0,1793, - 6557,2049,3720,4097,6412,2049,1835,1,8192,17,4097,6401,3841,6401,2049,3472,1793,6547,2049,6424, - 25,3,2049,6444,1,6537,7,10,1,6537,8,2049,3720,2049,3380,2049,6472,10,1,6520, - 2049,3496,10,6494,6570,147,99,104,97,114,0,1,32,1793,6579,1,95,2049,3380,10, - 1,6574,2049,2282,1,114,1793,6592,1,13,2049,3380,10,1,6587,2049,2282,1,110,1793, - 6605,1,10,2049,3380,10,1,6600,2049,2282,1,116,1793,6618,1,9,2049,3380,10,1, - 6613,2049,2282,1,48,1793,6631,1,0,2049,3380,10,1,6626,2049,2282,2049,3380,10,6562, - 6648,147,115,116,114,105,110,103,0,2049,59,25,2049,3380,1,6648,7,10,6638,6665, - 147,116,121,112,101,0,1,99,1793,6673,4,2049,3380,10,1,6669,2049,2282,1,115, - 1793,6686,4,2049,6648,3,10,1,6681,2049,2282,1,110,1793,6701,4,2049,5991,2049,6648, - 3,10,1,6694,2049,2282,3,10,6657,6717,147,104,97,110,100,108,101,0,1,92, - 1793,6726,2049,59,2049,6570,10,1,6721,2049,2282,1,37,1793,6739,2049,59,2049,6665,10, - 1,6734,2049,2282,2049,3380,10,6494,6758,147,115,58,102,111,114,109,97,116,0,1793, - 6787,2049,3675,1793,6782,2049,3472,1793,6777,2049,59,25,2049,6717,1,6768,7,10,1,6768, - 8,3,10,1,6764,2049,2077,10,1,6760,2049,3496,10,6746,6803,147,115,58,99,111, - 110,115,116,0,1793,6808,2049,3720,10,1,6805,2049,2065,2049,1981,10,6792,6825,134,86, - 97,108,117,101,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6815,6861,147,102,114,111, - 109,0,2049,82,2,1793,6880,1793,6873,1,6825,17,16,10,1,6868,2049,2077,2049,2918, - 10,1,6866,2049,2252,3,10,6853,6892,147,116,111,0,2,2049,82,1793,6910,2049,59, - 1,97,18,2049,2905,1,6825,17,15,4,10,1,6897,2049,2252,3,10,6792,6927,147, - 114,101,111,114,100,101,114,0,1793,6932,2049,6861,10,1,6929,2049,2065,2049,6892,10, - 6916,6948,147,99,117,114,114,121,0,2049,1835,1793,6960,4,2049,1719,2049,1765,2049,1787, - 10,1,6952,2049,2065,10,6939,6973,147,100,111,101,115,0,2049,1588,4,2049,6948,2049, - 1570,2049,161,16,1,147,2049,1649,10,6965,7002,147,100,58,102,111,114,45,101,97, - 99,104,0,1,2,1793,7030,15,25,2049,2055,1793,7022,1793,7017,4,8,10,1,7014, - 2049,2065,10,1,7012,2049,2065,1,7006,7,10,1,7006,8,3,10,6988,7050,147,100, - 58,108,111,111,107,117,112,45,120,116,0,1,0,4,1793,7076,2049,2055,2049,161, - 15,11,1793,7069,4,1,2016,2049,2065,10,1,7063,1,11,2049,67,10,1,7055,2049, - 7002,3,10,7035,7096,147,115,101,116,58,108,101,110,103,116,104,0,15,10,7082, - 7121,147,115,101,116,58,99,111,117,110,116,101,100,45,114,101,115,117,108,116, - 115,0,8,2049,1835,1793,7134,2,2049,108,1,108,2049,2252,10,1,7126,2049,2065,10, - 7098,7158,147,115,101,116,58,102,114,111,109,45,115,116,114,105,110,103,0,2049, - 1835,1793,7177,2,2049,82,2049,108,1793,7172,2049,108,10,1,7169,2049,4020,10,1,7162, - 2049,2065,10,7139,7187,134,81,0,0,7139,7204,147,115,101,116,58,102,111,114,45, - 101,97,99,104,0,1,7187,1793,7234,4097,7187,2049,59,1793,7228,2049,59,4,1793,7223, - 3841,7187,8,10,1,7219,2049,2065,10,1,7214,2049,2252,3,10,1,7208,2049,3104,10, - 7188,7250,147,115,101,116,58,100,117,112,0,2049,1835,1793,7268,2,15,2049,108,1793, - 7263,2049,108,10,1,7260,2049,7204,10,1,7254,2049,2065,10,7239,7287,147,115,101,116, - 58,102,105,108,116,101,114,0,1793,7315,67502597,1793,7294,8,10,1,7292,2049,2065,4, - 1793,7304,2049,108,10,1,7301,1793,7310,3,10,1,7308,2049,67,10,1,7289,2049,6948, - 2049,1835,1793,7330,67502597,15,2049,108,2049,7204,10,1,7323,2049,2065,2049,1835,67502597,18,2049, - 2918,67502597,16,10,7273,7348,134,70,0,0,7273,7366,147,115,101,116,58,99,111,110, - 116,97,105,110,115,63,0,1,7348,2049,3071,1793,7380,67502597,11,3841,7348,22,4097,7348, - 10,1,7372,2049,7204,3,3841,7348,10,7349,7412,147,115,101,116,58,99,111,110,116, - 97,105,110,115,45,115,116,114,105,110,103,63,0,1,7348,2049,3071,1793,7427,67502597, - 2049,96,3841,7348,22,4097,7348,10,1,7418,2049,7204,3,3841,7348,10,7388,7446,147,115, - 101,116,58,109,97,112,0,1793,7452,8,2049,108,10,1,7448,2049,6948,2049,1835,1793, - 7467,67502597,15,2049,108,2049,7204,10,1,7460,2049,2065,10,7435,7487,147,115,101,116,58, - 114,101,118,101,114,115,101,0,2049,1835,1793,7521,2049,59,1793,7499,17,2049,2918,10, - 1,7495,2049,2077,2,2049,108,1793,7515,2,15,2049,108,2049,2918,10,1,7508,2049,2252, - 3,10,1,7491,2049,2065,10,7472,7537,147,115,101,116,58,110,116,104,0,17,2049, - 2905,10,7526,7555,147,115,101,116,58,114,101,100,117,99,101,0,1793,7559,4,10, - 1,7557,2049,2065,2049,7204,10,7541,7578,147,115,101,116,58,109,97,107,101,0,2049, - 7121,2049,7487,10,7566,7588,159,123,0,1,288,2049,159,1,1556,2049,147,1,288,2049, - 159,10,7583,7606,159,125,0,1,305,2049,159,1,2065,2049,147,1,1556,2049,147,1, - 13,2049,153,1,41,2049,153,1,2918,2049,147,1,305,2049,159,1,7578,2049,147,10, - 7601,7645,134,73,48,0,112,111,0,7639,7654,134,73,49,0,112,111,0,7648,7663, - 134,73,50,0,112,111,0,7657,7672,134,73,51,0,120,111,0,7666,7685,147,111, - 112,99,111,100,101,0,2049,3694,46,46,0,1,7687,1793,7697,1,0,10,1,7694, - 2049,2326,2049,3694,108,105,0,1,7703,1793,7713,1,1,10,1,7710,2049,2326,2049,3694, - 100,117,0,1,7719,1793,7729,1,2,10,1,7726,2049,2326,2049,3694,100,114,0,1, - 7735,1793,7745,1,3,10,1,7742,2049,2326,2049,3694,115,119,0,1,7751,1793,7761,1, - 4,10,1,7758,2049,2326,2049,3694,112,117,0,1,7767,1793,7777,1,5,10,1,7774, - 2049,2326,2049,3694,112,111,0,1,7783,1793,7793,1,6,10,1,7790,2049,2326,2049,3694, - 106,117,0,1,7799,1793,7809,1,7,10,1,7806,2049,2326,2049,3694,99,97,0,1, - 7815,1793,7825,1,8,10,1,7822,2049,2326,2049,3694,99,99,0,1,7831,1793,7841,1, - 9,10,1,7838,2049,2326,2049,3694,114,101,0,1,7847,1793,7857,1,10,10,1,7854, - 2049,2326,2049,3694,101,113,0,1,7863,1793,7873,1,11,10,1,7870,2049,2326,2049,3694, - 110,101,0,1,7879,1793,7889,1,12,10,1,7886,2049,2326,2049,3694,108,116,0,1, - 7895,1793,7905,1,13,10,1,7902,2049,2326,2049,3694,103,116,0,1,7911,1793,7921,1, - 14,10,1,7918,2049,2326,2049,3694,102,101,0,1,7927,1793,7937,1,15,10,1,7934, - 2049,2326,2049,3694,115,116,0,1,7943,1793,7953,1,16,10,1,7950,2049,2326,2049,3694, - 97,100,0,1,7959,1793,7969,1,17,10,1,7966,2049,2326,2049,3694,115,117,0,1, - 7975,1793,7985,1,18,10,1,7982,2049,2326,2049,3694,109,117,0,1,7991,1793,8001,1, - 19,10,1,7998,2049,2326,2049,3694,100,105,0,1,8007,1793,8017,1,20,10,1,8014, - 2049,2326,2049,3694,97,110,0,1,8023,1793,8033,1,21,10,1,8030,2049,2326,2049,3694, - 111,114,0,1,8039,1793,8049,1,22,10,1,8046,2049,2326,2049,3694,120,111,0,1, - 8055,1793,8065,1,23,10,1,8062,2049,2326,2049,3694,115,104,0,1,8071,1793,8081,1, - 24,10,1,8078,2049,2326,2049,3694,122,114,0,1,8087,1793,8097,1,25,10,1,8094, - 2049,2326,2049,3694,101,110,0,1,8103,1793,8113,1,26,10,1,8110,2049,2326,2049,3694, - 105,101,0,1,8119,1793,8129,1,27,10,1,8126,2049,2326,2049,3694,105,113,0,1, - 8135,1793,8145,1,28,10,1,8142,2049,2326,2049,3694,105,105,0,1,8151,1793,8161,1, - 29,10,1,8158,2049,2326,3,1,0,10,7675,8177,147,112,97,99,107,0,1,7645, - 2049,7685,1,7654,2049,7685,1,7663,2049,7685,1,7672,2049,7685,1,-24,24,4,1,-16, - 24,17,4,1,-8,24,17,4,17,10,7601,8214,147,105,0,2,1,7645,1,2, - 2049,3164,1,2,17,2,1,7654,1,2,2049,3164,1,2,17,2,1,7663,1,2, - 2049,3164,1,2,17,1,7672,1,2,2049,3164,2049,8177,2049,108,10,8209,8260,147,100, - 0,2049,108,10,8255,8268,147,114,0,2049,200,2049,161,15,2049,108,10,8263,8283,159, - 97,115,123,0,3841,127,1,127,2049,3071,10,8276,8297,159,125,97,115,0,4097,127, - 10,8290,8316,147,99,117,114,114,101,110,116,45,108,105,110,101,0,2049,3565,1, - 1025,18,10,8300,8338,147,99,111,117,110,116,45,116,111,107,101,110,115,0,1793, - 8344,1,32,11,10,1,8340,2049,4449,2049,82,10,8322,8365,147,110,101,120,116,45, - 116,111,107,101,110,0,1,32,2049,6162,10,8351,8388,147,112,114,111,99,101,115, - 115,45,116,111,107,101,110,115,0,1793,8414,2049,8365,4,1793,8407,2,2049,82,2049, - 2580,1,367,1,11,2049,67,10,1,8395,2049,2065,2049,2905,10,1,8390,2049,2252,2049, - 367,10,8290,8435,147,115,58,101,118,97,108,117,97,116,101,0,2049,8316,2049,4652, - 2049,8316,2,2049,8338,2049,8388,10,8421,8453,134,76,80,0,0,8447,8463,134,73,110, - 100,101,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 73,10,1,2518,2049,2065,1,-1,23,25,6,771,10,2507,2541,147,110,58,77,65, + 88,0,1,2147483647,10,2532,2553,147,110,58,77,73,78,0,1,-2147483648,10,2544,2567,147, + 110,58,122,101,114,111,63,0,1,0,11,10,2556,2583,147,110,58,45,122,101, + 114,111,63,0,1,0,12,10,2571,2602,147,110,58,110,101,103,97,116,105,118, + 101,63,0,1,0,13,10,2587,2621,147,110,58,112,111,115,105,116,105,118,101, + 63,0,1,-1,14,10,2606,2649,147,110,58,115,116,114,105,99,116,108,121,45, + 112,111,115,105,116,105,118,101,63,0,1,0,14,10,2625,2664,147,110,58,101, + 118,101,110,63,0,1,2,20,3,2049,2567,10,2653,2681,147,110,58,111,100,100, + 63,0,1,2,20,3,2049,2583,10,2671,2695,153,114,111,116,0,67503109,10,2688,2702, + 153,47,0,197652,10,2697,2711,153,109,111,100,0,788,10,2704,2720,147,110,111,116, + 0,1,-1,23,10,2713,2733,147,110,58,112,111,119,0,1,1,4,1793,2741,67502597, + 19,10,1,2738,2049,2252,772,10,2724,2759,147,110,58,110,101,103,97,116,101,0, + 1,-1,19,10,2747,2775,147,110,58,115,113,117,97,114,101,0,2,19,10,2763, + 2788,147,110,58,115,113,114,116,0,1,1,1793,2806,2049,2055,197652,67502597,18,1,2, + 197652,25,17,1,2792,7,10,1,2792,8,772,10,2778,2820,147,110,58,109,105,110, + 0,2049,2055,13,1793,2827,3,10,1,2825,1793,2833,772,10,1,2831,2049,67,10,2811, + 2847,147,110,58,109,97,120,0,2049,2055,14,1793,2854,3,10,1,2852,1793,2860,772, + 10,1,2858,2049,67,10,2838,2874,147,110,58,97,98,115,0,2,2049,2759,2049,2847, + 10,2865,2891,147,110,58,108,105,109,105,116,0,4,5,2049,2820,6,2049,2847,10, + 2880,2908,147,110,58,105,110,99,0,1,1,17,10,2899,2921,147,110,58,100,101, + 99,0,1,1,18,10,2912,2939,147,110,58,98,101,116,119,101,101,110,63,0, + 67503109,1793,2947,67503109,67503109,2049,2891,10,1,2942,2049,2077,11,10,2925,2965,147,118,58,105, + 110,99,45,98,121,0,1793,2970,15,17,10,1,2967,2049,2077,16,10,2953,2988,147, + 118,58,100,101,99,45,98,121,0,1793,2994,15,4,18,10,1,2990,2049,2077,16, + 10,2976,3009,147,118,58,105,110,99,0,1,1,4,2049,2965,10,3000,3024,147,118, + 58,100,101,99,0,1,1,4,2049,2988,10,3015,3041,147,118,58,108,105,109,105, + 116,0,5,5,2,15,6,6,2049,2891,4,16,10,3030,3060,147,118,58,111,110, + 0,2049,2428,4,16,10,3052,3074,147,118,58,111,102,102,0,2049,2440,4,16,10, + 3065,3088,147,97,108,108,111,116,0,1,3,2049,2965,10,3079,3107,147,118,58,112, + 114,101,115,101,114,118,101,0,4,2,15,1793,3121,1793,3116,8,10,1,3114,2049, + 2065,10,1,3112,2049,2065,4,16,10,3093,3146,147,118,58,117,112,100,97,116,101, + 45,117,115,105,110,103,0,4,1793,3153,15,4,8,10,1,3149,2049,2077,16,10, + 3128,3167,147,99,111,112,121,0,1793,3176,1,59,2049,2065,2049,62,10,1,3169,2049, + 2252,3,3,10,3159,3196,147,83,99,111,112,101,76,105,115,116,0,12541,13384,10, + 3183,3205,147,123,123,0,2049,1570,2,1,3196,2049,62,16,10,3199,3230,147,45,45, + 45,114,101,118,101,97,108,45,45,45,0,2049,1570,1,3196,2049,2908,16,10,3214, + 3244,147,125,125,0,1,3196,2049,59,4,15,11,1793,3258,3841,3196,4097,2,10,1, + 3253,1793,3288,3841,3196,1793,3283,1,2,15,2,15,1,3196,2049,2908,15,12,25,3, + 1,3268,7,10,1,3266,8,16,10,1,3262,2049,67,10,3238,3303,134,66,117,102, + 102,101,114,0,0,10,3293,3312,134,80,116,114,0,0,10,3305,3327,147,116,101, + 114,109,105,110,97,116,101,0,1,0,3841,3312,16,10,3238,3349,147,98,117,102, + 102,101,114,58,115,116,97,114,116,0,3841,3303,10,3333,3366,147,98,117,102,102, + 101,114,58,101,110,100,0,3841,3312,10,3352,3383,147,98,117,102,102,101,114,58, + 97,100,100,0,2049,3366,16,1,3312,2049,3009,2049,3327,10,3369,3407,147,98,117,102, + 102,101,114,58,103,101,116,0,1,3312,2049,3024,2049,3366,15,2049,3327,10,3393,3433, + 147,98,117,102,102,101,114,58,101,109,112,116,121,0,2049,3349,4097,3312,2049,3327, + 10,3417,3455,147,98,117,102,102,101,114,58,115,105,122,101,0,2049,3366,2049,3349, + 18,10,3440,3475,147,98,117,102,102,101,114,58,115,101,116,0,4097,3303,2049,3433, + 10,3461,3499,147,98,117,102,102,101,114,58,112,114,101,115,101,114,118,101,0, + 3841,3303,3841,3312,1793,3516,1793,3509,8,10,1,3507,2049,2065,4097,3303,10,1,3505,2049, + 2065,4097,3312,10,3480,3538,134,84,101,109,112,83,116,114,105,110,103,115,0,32, + 3523,3556,134,84,101,109,112,83,116,114,105,110,103,77,97,120,0,512,3539,3568, + 147,83,84,82,73,78,71,83,0,2049,1543,3841,3538,3841,3556,19,18,10,3557,3588, + 134,67,117,114,114,101,110,116,0,21,10,3577,3603,147,115,58,112,111,105,110, + 116,101,114,0,3841,3588,3841,3556,19,2049,3568,17,10,3590,3622,147,115,58,110,101, + 120,116,0,1,3588,2049,3009,3841,3588,3841,3538,11,1793,3638,1,0,4097,3588,10,1, + 3633,9,10,3557,3652,147,115,58,116,101,109,112,0,2,2049,82,2049,2908,2049,3603, + 4,2049,3167,2049,3603,2049,3622,10,3642,3678,147,115,58,101,109,112,116,121,0,2049, + 3603,2049,3622,1,0,67502597,16,10,3667,3697,147,115,58,115,107,105,112,0,6,1793, + 3705,2049,59,2049,2583,10,1,3700,2049,2197,2049,2921,5,10,3687,3723,147,115,58,107, + 101,101,112,0,2049,1806,1793,3732,1,3697,2049,1765,10,1,3727,9,2049,1835,1793,3742, + 2049,122,10,1,3739,2049,2065,2049,134,10,3713,3761,159,112,114,101,102,105,120,58, + 39,0,2049,1806,1793,3768,2049,3723,10,1,3765,1793,3775,2049,3652,10,1,3772,2049,67, + 10,3749,3790,147,115,58,99,104,111,112,0,2049,3652,2,2049,82,67502597,17,2049,2921, + 1,0,4,16,10,3780,3817,147,115,58,114,101,118,101,114,115,101,0,1793,3859, + 2,2049,3652,2049,3475,1,82,1793,3835,2,2049,82,17,2049,2921,10,1,3828,2049,2092, + 4,1793,3849,2,15,2049,3383,2049,2921,10,1,3842,2049,2252,3,2049,3349,2049,3652,10, + 1,3819,2049,3499,10,3804,3879,147,115,58,116,114,105,109,45,108,101,102,116,0, + 2049,3652,1793,3904,2049,59,1793,3891,1,32,11,10,1,3887,1793,3898,2049,2583,10,1, + 3895,2049,2092,21,10,1,3883,2049,2197,2049,2921,10,3864,3927,147,115,58,116,114,105, + 109,45,114,105,103,104,116,0,2049,3652,2049,3817,2049,3879,2049,3817,10,3911,3946,147, + 115,58,116,114,105,109,0,2049,3927,2049,3879,10,3936,3964,147,115,58,112,114,101, + 112,101,110,100,0,2049,3652,1793,3988,2,2049,82,17,1793,3980,2,2049,82,2049,2908, + 10,1,3974,2049,2065,4,2049,3167,10,1,3968,2049,2077,10,3951,4005,147,115,58,97, + 112,112,101,110,100,0,4,2049,3964,10,3993,4023,147,115,58,102,111,114,45,101, + 97,99,104,0,1793,4063,67502597,15,25,3,2049,2055,1793,4046,1793,4041,1,35,2049,2065, + 8,10,1,4035,2049,2065,10,1,4033,2049,2065,1793,4055,2049,2908,10,1,4052,2049,2065, + 1,4025,7,10,1,4025,8,771,10,4009,4082,147,115,58,105,110,100,101,120,45, + 111,102,0,4,1793,4105,2049,59,25,4,1793,4094,67502597,12,10,1,4091,2049,2065,4, + 25,3,1,4085,7,10,1,4085,2049,2077,1793,4116,18,2049,2921,772,10,1,4111,2049, + 2077,2049,82,67502597,11,1793,4130,3,1,-1,10,1,4126,9,10,4068,4154,147,115,58, + 99,111,110,116,97,105,110,115,45,99,104,97,114,63,0,2049,4082,1,-1,12, + 10,4134,4167,134,83,114,99,0,0,4160,4175,134,84,97,114,0,0,4168,4183,134, + 80,97,100,0,0,4176,4189,134,73,0,0,4184,4195,134,70,0,0,4190,4202,134, + 65,116,0,0,4196,4216,147,116,101,114,109,105,110,97,116,101,0,1,0,3841, + 4183,3841,4175,2049,82,17,16,10,4203,4238,147,101,120,116,114,97,99,116,0,3841, + 4167,3841,4189,17,3841,4183,3841,4175,2049,82,2049,3167,10,4227,4263,147,99,111,109,112, + 97,114,101,0,3841,4183,3841,4175,2049,96,3841,4195,22,4097,4195,3841,4195,1793,4283,3841, + 4189,4097,4202,10,1,4278,2049,73,10,4252,4296,147,110,101,120,116,0,1,4189,2049, + 3009,10,4134,4323,147,115,58,99,111,110,116,97,105,110,115,45,115,116,114,105, + 110,103,63,0,4097,4175,4097,4167,2049,3678,4097,4183,1,0,4097,4189,1,0,4097,4195, + 3841,4167,2049,82,1793,4354,2049,4238,2049,4216,2049,4263,2049,4296,10,1,4345,2049,2252,3841, + 4195,10,4301,4382,147,115,58,105,110,100,101,120,45,111,102,45,115,116,114,105, + 110,103,0,4097,4175,4097,4167,2049,3678,4097,4183,1,0,4097,4189,1,0,4097,4195,1, + -1,4097,4202,3841,4167,2049,82,1793,4417,2049,4238,2049,4216,2049,4263,2049,4296,10,1,4408, + 2049,2252,3841,4195,1793,4428,3841,4202,10,1,4425,1793,4435,1,-1,10,1,4432,2049,67, + 10,4361,4452,147,115,58,102,105,108,116,101,114,0,1793,4489,2049,3678,2049,3475,4, + 1793,4481,2049,2055,4,8,1793,4470,2049,3383,10,1,4467,1793,4476,3,10,1,4474,2049, + 67,10,1,4461,2049,4023,3,2049,3349,10,1,4454,2049,3499,10,4440,4503,147,115,58, + 109,97,112,0,1793,4525,2049,3678,2049,3475,4,1793,4517,67502597,8,2049,3383,10,1,4512, + 2049,4023,3,2049,3349,10,1,4505,2049,3499,10,4494,4542,147,115,58,115,117,98,115, + 116,114,0,1793,4548,17,2049,3678,10,1,4544,2049,2065,1793,4565,67502597,1793,4560,2049,3167, + 10,1,4557,2049,2065,10,1,4554,2049,2077,67502597,1793,4578,17,1,0,4,16,10,1, + 4572,2049,2065,10,4530,4594,147,115,58,114,105,103,104,116,0,67502597,2049,82,67502597,18, + 4,2049,4542,10,4583,4613,147,115,58,108,101,102,116,0,1,0,4,2049,4542,10, + 4603,4629,147,115,58,104,97,115,104,0,1,5381,4,1793,4640,4,1,33,19,17, + 10,1,4634,2049,4023,10,4619,4655,147,115,58,99,111,112,121,0,67502597,2049,82,2049, + 2908,2049,3167,10,4645,4675,147,115,58,68,73,71,73,84,83,0,2049,3697,48,49, + 50,51,52,53,54,55,56,57,0,1,4677,10,4663,4712,147,115,58,65,83,67, + 73,73,45,76,79,87,69,82,67,65,83,69,0,2049,3697,97,98,99,100,101, + 102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121, + 122,0,1,4714,10,4691,4765,147,115,58,65,83,67,73,73,45,85,80,80,69, + 82,67,65,83,69,0,2049,3697,65,66,67,68,69,70,71,72,73,74,75,76, + 77,78,79,80,81,82,83,84,85,86,87,88,89,90,0,1,4767,10,4744,4816, + 147,115,58,65,83,67,73,73,45,76,69,84,84,69,82,83,0,2049,3697,97, + 98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117, + 118,119,120,121,122,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, + 80,81,82,83,84,85,86,87,88,89,90,0,1,4818,10,4797,4891,147,115,58, + 80,85,78,67,84,85,65,84,73,79,78,0,2049,3697,95,33,34,35,36,37, + 38,39,40,41,42,43,44,45,46,47,58,59,60,61,62,63,64,91,92,93, + 94,96,123,124,125,126,0,1,4893,1,95,67502597,16,10,4874,4949,134,115,58,87, + 72,73,84,69,83,80,65,67,69,0,9,10,13,0,4933,0,134,65,83,67, + 73,73,58,78,85,76,0,4953,1,134,65,83,67,73,73,58,83,79,72,0, + 4966,2,134,65,83,67,73,73,58,83,84,88,0,4979,3,134,65,83,67,73, + 73,58,69,84,88,0,4992,4,134,65,83,67,73,73,58,69,79,84,0,5005, + 5,134,65,83,67,73,73,58,69,78,81,0,5018,6,134,65,83,67,73,73, + 58,65,67,75,0,5031,7,134,65,83,67,73,73,58,66,69,76,0,5044,8, + 134,65,83,67,73,73,58,66,83,0,5057,9,134,65,83,67,73,73,58,72, + 84,0,5069,10,134,65,83,67,73,73,58,76,70,0,5081,11,134,65,83,67, + 73,73,58,86,84,0,5093,12,134,65,83,67,73,73,58,70,70,0,5105,13, + 134,65,83,67,73,73,58,67,82,0,5117,14,134,65,83,67,73,73,58,83, + 79,0,5129,15,134,65,83,67,73,73,58,83,73,0,5141,16,134,65,83,67, + 73,73,58,68,76,69,0,5153,17,134,65,83,67,73,73,58,68,67,49,0, + 5166,18,134,65,83,67,73,73,58,68,67,50,0,5179,19,134,65,83,67,73, + 73,58,68,67,51,0,5192,20,134,65,83,67,73,73,58,68,67,52,0,5205, + 21,134,65,83,67,73,73,58,78,65,75,0,5218,22,134,65,83,67,73,73, + 58,83,89,78,0,5231,23,134,65,83,67,73,73,58,69,84,66,0,5244,24, + 134,65,83,67,73,73,58,67,65,78,0,5257,25,134,65,83,67,73,73,58, + 69,77,0,5270,26,134,65,83,67,73,73,58,83,85,66,0,5282,27,134,65, + 83,67,73,73,58,69,83,67,0,5295,28,134,65,83,67,73,73,58,70,83, + 0,5308,29,134,65,83,67,73,73,58,71,83,0,5320,30,134,65,83,67,73, + 73,58,82,83,0,5332,31,134,65,83,67,73,73,58,85,83,0,5344,32,134, + 65,83,67,73,73,58,83,80,65,67,69,0,5356,127,134,65,83,67,73,73, + 58,68,69,76,0,5371,5397,147,99,58,108,101,116,116,101,114,63,0,1,65, + 1,122,2049,2939,10,5384,5420,147,99,58,108,111,119,101,114,99,97,115,101,63, + 0,1,97,1,122,2049,2939,10,5404,5443,147,99,58,117,112,112,101,114,99,97, + 115,101,63,0,1,65,1,90,2049,2939,10,5427,5462,147,99,58,100,105,103,105, + 116,63,0,1,48,1,57,2049,2939,10,5450,5483,147,99,58,118,105,115,105,98, + 108,101,63,0,1,31,1,126,2049,2939,10,5469,5502,147,99,58,118,111,119,101, + 108,63,0,2049,3697,97,101,105,111,117,65,69,73,79,85,0,1,5504,4,2049, + 4154,10,5490,5537,147,99,58,99,111,110,115,111,110,97,110,116,63,0,2,2049, + 5397,1793,5547,2049,5502,2049,2720,10,1,5542,1793,5555,3,2049,2440,10,1,5551,2049,67, + 10,5521,5566,134,87,83,0,32,9,10,13,0,5521,5588,147,99,58,119,104,105, + 116,101,115,112,97,99,101,63,0,1,5566,4,2049,4154,10,5571,5611,147,99,58, + 45,108,111,119,101,114,99,97,115,101,63,0,2049,5420,2049,2720,10,5594,5633,147, + 99,58,45,117,112,112,101,114,99,97,115,101,63,0,2049,5443,2049,2720,10,5616, + 5651,147,99,58,45,100,105,103,105,116,63,0,2049,5462,2049,2720,10,5638,5674,147, + 99,58,45,119,104,105,116,101,115,112,97,99,101,63,0,2049,5588,2049,2720,10, + 5656,5694,147,99,58,45,118,105,115,105,98,108,101,63,0,2049,5483,2049,2720,10, + 5679,5712,147,99,58,45,118,111,119,101,108,63,0,2049,5502,2049,2720,10,5699,5734, + 147,99,58,45,99,111,110,115,111,110,97,110,116,63,0,2049,5537,2049,2720,10, + 5717,5753,147,99,58,116,111,45,117,112,112,101,114,0,2,2049,5420,25,3,1, + 32,18,10,5739,5776,147,99,58,116,111,45,108,111,119,101,114,0,2,2049,5443, + 25,3,1,32,17,10,5762,5800,147,99,58,116,111,45,115,116,114,105,110,103, + 0,2049,3697,46,0,1,5802,2049,3652,1793,5812,16,10,1,5810,2049,2077,10,5785,5834, + 147,99,58,116,111,103,103,108,101,45,99,97,115,101,0,2,2049,5420,1793,5842, + 2049,5753,10,1,5839,1793,5849,2049,5776,10,1,5846,2049,67,10,5817,5869,147,99,58, + 116,111,45,110,117,109,98,101,114,0,2,2049,5462,1793,5878,1,48,18,10,1, + 5874,1793,5886,3,1,0,10,1,5882,2049,67,10,5854,5905,147,115,58,116,111,45, + 117,112,112,101,114,0,1793,5910,2049,5753,10,1,5907,2049,4503,10,5891,5929,147,115, + 58,116,111,45,108,111,119,101,114,0,1793,5934,2049,5776,10,1,5931,2049,4503,10, + 5915,5948,134,86,97,108,117,101,0,0,5939,5960,147,99,111,114,114,101,99,116, + 0,2,1,48,13,1793,5975,1,48,67502597,18,1,2,19,17,10,1,5966,9,10, + 5915,5994,147,110,58,116,111,45,115,116,114,105,110,103,0,1793,6048,2049,1835,2049, + 3475,2,4097,5948,2049,2874,1793,6022,1,10,20,4,1,48,17,2049,5960,2049,3383,2, + 2049,2583,10,1,6007,2049,2197,3,3841,5948,2049,2602,1793,6038,1,45,2049,3383,10,1, + 6033,9,2049,3349,2049,3817,2049,3652,10,1,5996,2049,3499,10,5979,6075,134,82,101,119, + 114,105,116,101,85,110,100,101,114,115,99,111,114,101,115,0,-1,6053,6083,147, + 115,117,98,0,1,95,1793,6090,1,32,10,1,6087,2049,2282,10,6076,6106,147,114, + 101,119,114,105,116,101,0,3841,6075,1793,6115,1,6083,2049,4503,10,1,6110,9,1, + 3761,8,10,6053,6134,159,112,114,101,102,105,120,58,39,0,2049,6106,10,6122,6149, + 159,112,114,101,102,105,120,58,34,0,2049,6106,2049,3723,10,6137,6165,147,115,58, + 115,112,108,105,116,0,2049,2055,2049,4082,772,2049,2055,2049,4613,1793,6178,17,10,1, + 6176,2049,2065,10,6154,6204,147,115,58,115,112,108,105,116,45,111,110,45,115,116, + 114,105,110,103,0,2049,2055,2049,4382,2049,2908,772,2049,2055,2049,4613,1793,6219,17,10, + 1,6217,2049,2065,10,6183,6237,147,115,58,114,101,112,108,97,99,101,0,67502597,2049, + 82,2049,1835,16,1793,6253,2049,6204,4,2049,1835,15,17,10,1,6245,2049,2065,2049,3964, + 2049,4005,10,6224,6274,134,83,112,108,105,116,45,79,110,0,0,6262,6285,147,109, + 97,116,99,104,63,0,3841,6274,11,10,6275,6302,147,116,101,114,109,105,110,97, + 116,101,0,1,0,67502597,2049,2921,16,10,6289,6317,147,115,116,101,112,0,1793,6322, + 2049,2908,10,1,6319,2049,2065,2049,6285,1793,6336,2,2049,108,2049,6302,10,1,6330,9, + 10,6224,6354,147,115,58,116,111,107,101,110,105,122,101,0,4097,6274,2049,3723,2049, + 1835,1,0,2049,108,1793,6381,2,2049,108,2,1793,6375,2049,6317,10,1,6372,2049,4023, + 3,10,1,6366,2049,2065,2049,1835,67502597,18,2049,2921,67502597,16,10,6340,6404,134,84,111, + 107,101,110,115,0,0,6394,6415,134,78,101,101,100,108,101,0,0,6405,6427,147, + 45,109,97,116,99,104,63,0,2,3841,6415,2049,4323,10,6416,6447,147,115,97,118, + 101,45,116,111,107,101,110,0,3841,6415,2049,6204,2049,3723,2049,3383,2049,2908,10,6433, + 6475,147,116,111,107,101,110,115,45,116,111,45,115,101,116,0,2049,1835,3841,6404, + 2049,3455,2,2049,108,1793,6491,2049,59,2049,108,10,1,6486,2049,2252,3,10,6340,6521, + 147,115,58,116,111,107,101,110,105,122,101,45,111,110,45,115,116,114,105,110, + 103,0,1793,6560,2049,3723,4097,6415,2049,1835,1,8192,17,4097,6404,3841,6404,2049,3475,1793, + 6550,2049,6427,25,3,2049,6447,1,6540,7,10,1,6540,8,2049,3723,2049,3383,2049,6475, + 10,1,6523,2049,3499,10,6497,6573,147,99,104,97,114,0,1,32,1793,6582,1,95, + 2049,3383,10,1,6577,2049,2282,1,114,1793,6595,1,13,2049,3383,10,1,6590,2049,2282, + 1,110,1793,6608,1,10,2049,3383,10,1,6603,2049,2282,1,116,1793,6621,1,9,2049, + 3383,10,1,6616,2049,2282,1,48,1793,6634,1,0,2049,3383,10,1,6629,2049,2282,2049, + 3383,10,6565,6651,147,115,116,114,105,110,103,0,2049,59,25,2049,3383,1,6651,7, + 10,6641,6668,147,116,121,112,101,0,1,99,1793,6676,4,2049,3383,10,1,6672,2049, + 2282,1,115,1793,6689,4,2049,6651,3,10,1,6684,2049,2282,1,110,1793,6704,4,2049, + 5994,2049,6651,3,10,1,6697,2049,2282,3,10,6660,6720,147,104,97,110,100,108,101, + 0,1,92,1793,6729,2049,59,2049,6573,10,1,6724,2049,2282,1,37,1793,6742,2049,59, + 2049,6668,10,1,6737,2049,2282,2049,3383,10,6497,6761,147,115,58,102,111,114,109,97, + 116,0,1793,6790,2049,3678,1793,6785,2049,3475,1793,6780,2049,59,25,2049,6720,1,6771,7, + 10,1,6771,8,3,10,1,6767,2049,2077,10,1,6763,2049,3499,10,6749,6806,147,115, + 58,99,111,110,115,116,0,1793,6811,2049,3723,10,1,6808,2049,2065,2049,1981,10,6795, + 6828,134,86,97,108,117,101,115,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6818,6864,147, + 102,114,111,109,0,2049,82,2,1793,6883,1793,6876,1,6828,17,16,10,1,6871,2049, + 2077,2049,2921,10,1,6869,2049,2252,3,10,6856,6895,147,116,111,0,2,2049,82,1793, + 6913,2049,59,1,97,18,2049,2908,1,6828,17,15,4,10,1,6900,2049,2252,3,10, + 6795,6930,147,114,101,111,114,100,101,114,0,1793,6935,2049,6864,10,1,6932,2049,2065, + 2049,6895,10,6919,6951,147,99,117,114,114,121,0,2049,1835,1793,6963,4,2049,1719,2049, + 1765,2049,1787,10,1,6955,2049,2065,10,6942,6976,147,100,111,101,115,0,2049,1588,4, + 2049,6951,2049,1570,2049,161,16,1,147,2049,1649,10,6968,7005,147,100,58,102,111,114, + 45,101,97,99,104,0,1,2,1793,7033,15,25,2049,2055,1793,7025,1793,7020,4,8, + 10,1,7017,2049,2065,10,1,7015,2049,2065,1,7009,7,10,1,7009,8,3,10,6991, + 7053,147,100,58,108,111,111,107,117,112,45,120,116,0,1,0,4,1793,7079,2049, + 2055,2049,161,15,11,1793,7072,4,1,2016,2049,2065,10,1,7066,1,11,2049,67,10, + 1,7058,2049,7005,3,10,7038,7099,147,115,101,116,58,108,101,110,103,116,104,0, + 15,10,7085,7124,147,115,101,116,58,99,111,117,110,116,101,100,45,114,101,115, + 117,108,116,115,0,8,2049,1835,1793,7137,2,2049,108,1,108,2049,2252,10,1,7129, + 2049,2065,10,7101,7161,147,115,101,116,58,102,114,111,109,45,115,116,114,105,110, + 103,0,2049,1835,1793,7180,2,2049,82,2049,108,1793,7175,2049,108,10,1,7172,2049,4023, + 10,1,7165,2049,2065,10,7142,7190,134,81,0,0,7142,7207,147,115,101,116,58,102, + 111,114,45,101,97,99,104,0,1,7190,1793,7237,4097,7190,2049,59,1793,7231,2049,59, + 4,1793,7226,3841,7190,8,10,1,7222,2049,2065,10,1,7217,2049,2252,3,10,1,7211, + 2049,3107,10,7191,7253,147,115,101,116,58,100,117,112,0,2049,1835,1793,7271,2,15, + 2049,108,1793,7266,2049,108,10,1,7263,2049,7207,10,1,7257,2049,2065,10,7242,7290,147, + 115,101,116,58,102,105,108,116,101,114,0,1793,7318,67502597,1793,7297,8,10,1,7295, + 2049,2065,4,1793,7307,2049,108,10,1,7304,1793,7313,3,10,1,7311,2049,67,10,1, + 7292,2049,6951,2049,1835,1793,7333,67502597,15,2049,108,2049,7207,10,1,7326,2049,2065,2049,1835, + 67502597,18,2049,2921,67502597,16,10,7276,7351,134,70,0,0,7276,7369,147,115,101,116,58, + 99,111,110,116,97,105,110,115,63,0,1,7351,2049,3074,1793,7383,67502597,11,3841,7351, + 22,4097,7351,10,1,7375,2049,7207,3,3841,7351,10,7352,7415,147,115,101,116,58,99, + 111,110,116,97,105,110,115,45,115,116,114,105,110,103,63,0,1,7351,2049,3074, + 1793,7430,67502597,2049,96,3841,7351,22,4097,7351,10,1,7421,2049,7207,3,3841,7351,10,7391, + 7449,147,115,101,116,58,109,97,112,0,1793,7455,8,2049,108,10,1,7451,2049,6951, + 2049,1835,1793,7470,67502597,15,2049,108,2049,7207,10,1,7463,2049,2065,10,7438,7490,147,115, + 101,116,58,114,101,118,101,114,115,101,0,2049,1835,1793,7524,2049,59,1793,7502,17, + 2049,2921,10,1,7498,2049,2077,2,2049,108,1793,7518,2,15,2049,108,2049,2921,10,1, + 7511,2049,2252,3,10,1,7494,2049,2065,10,7475,7540,147,115,101,116,58,110,116,104, + 0,17,2049,2908,10,7529,7558,147,115,101,116,58,114,101,100,117,99,101,0,1793, + 7562,4,10,1,7560,2049,2065,2049,7207,10,7544,7581,147,115,101,116,58,109,97,107, + 101,0,2049,7124,2049,7490,10,7569,7591,159,123,0,1,288,2049,159,1,1556,2049,147, + 1,288,2049,159,10,7586,7609,159,125,0,1,305,2049,159,1,2065,2049,147,1,1556, + 2049,147,1,13,2049,153,1,41,2049,153,1,2921,2049,147,1,305,2049,159,1,7581, + 2049,147,10,7604,7648,134,73,48,0,112,111,0,7642,7657,134,73,49,0,112,111, + 0,7651,7666,134,73,50,0,112,111,0,7660,7675,134,73,51,0,120,111,0,7669, + 7688,147,111,112,99,111,100,101,0,2049,3697,46,46,0,1,7690,1793,7700,1,0, + 10,1,7697,2049,2326,2049,3697,108,105,0,1,7706,1793,7716,1,1,10,1,7713,2049, + 2326,2049,3697,100,117,0,1,7722,1793,7732,1,2,10,1,7729,2049,2326,2049,3697,100, + 114,0,1,7738,1793,7748,1,3,10,1,7745,2049,2326,2049,3697,115,119,0,1,7754, + 1793,7764,1,4,10,1,7761,2049,2326,2049,3697,112,117,0,1,7770,1793,7780,1,5, + 10,1,7777,2049,2326,2049,3697,112,111,0,1,7786,1793,7796,1,6,10,1,7793,2049, + 2326,2049,3697,106,117,0,1,7802,1793,7812,1,7,10,1,7809,2049,2326,2049,3697,99, + 97,0,1,7818,1793,7828,1,8,10,1,7825,2049,2326,2049,3697,99,99,0,1,7834, + 1793,7844,1,9,10,1,7841,2049,2326,2049,3697,114,101,0,1,7850,1793,7860,1,10, + 10,1,7857,2049,2326,2049,3697,101,113,0,1,7866,1793,7876,1,11,10,1,7873,2049, + 2326,2049,3697,110,101,0,1,7882,1793,7892,1,12,10,1,7889,2049,2326,2049,3697,108, + 116,0,1,7898,1793,7908,1,13,10,1,7905,2049,2326,2049,3697,103,116,0,1,7914, + 1793,7924,1,14,10,1,7921,2049,2326,2049,3697,102,101,0,1,7930,1793,7940,1,15, + 10,1,7937,2049,2326,2049,3697,115,116,0,1,7946,1793,7956,1,16,10,1,7953,2049, + 2326,2049,3697,97,100,0,1,7962,1793,7972,1,17,10,1,7969,2049,2326,2049,3697,115, + 117,0,1,7978,1793,7988,1,18,10,1,7985,2049,2326,2049,3697,109,117,0,1,7994, + 1793,8004,1,19,10,1,8001,2049,2326,2049,3697,100,105,0,1,8010,1793,8020,1,20, + 10,1,8017,2049,2326,2049,3697,97,110,0,1,8026,1793,8036,1,21,10,1,8033,2049, + 2326,2049,3697,111,114,0,1,8042,1793,8052,1,22,10,1,8049,2049,2326,2049,3697,120, + 111,0,1,8058,1793,8068,1,23,10,1,8065,2049,2326,2049,3697,115,104,0,1,8074, + 1793,8084,1,24,10,1,8081,2049,2326,2049,3697,122,114,0,1,8090,1793,8100,1,25, + 10,1,8097,2049,2326,2049,3697,101,110,0,1,8106,1793,8116,1,26,10,1,8113,2049, + 2326,2049,3697,105,101,0,1,8122,1793,8132,1,27,10,1,8129,2049,2326,2049,3697,105, + 113,0,1,8138,1793,8148,1,28,10,1,8145,2049,2326,2049,3697,105,105,0,1,8154, + 1793,8164,1,29,10,1,8161,2049,2326,3,1,0,10,7678,8180,147,112,97,99,107, + 0,1,7648,2049,7688,1,7657,2049,7688,1,7666,2049,7688,1,7675,2049,7688,1,-24,24, + 4,1,-16,24,17,4,1,-8,24,17,4,17,10,7604,8217,147,105,0,2,1, + 7648,1,2,2049,3167,1,2,17,2,1,7657,1,2,2049,3167,1,2,17,2,1, + 7666,1,2,2049,3167,1,2,17,1,7675,1,2,2049,3167,2049,8180,2049,108,10,8212, + 8263,147,100,0,2049,108,10,8258,8271,147,114,0,2049,200,2049,161,15,2049,108,10, + 8266,8286,159,97,115,123,0,3841,127,1,127,2049,3074,10,8279,8300,159,125,97,115, + 0,4097,127,10,8293,8319,147,99,117,114,114,101,110,116,45,108,105,110,101,0, + 2049,3568,1,1025,18,10,8303,8341,147,99,111,117,110,116,45,116,111,107,101,110, + 115,0,1793,8347,1,32,11,10,1,8343,2049,4452,2049,82,10,8325,8368,147,110,101, + 120,116,45,116,111,107,101,110,0,1,32,2049,6165,10,8354,8391,147,112,114,111, + 99,101,115,115,45,116,111,107,101,110,115,0,1793,8417,2049,8368,4,1793,8410,2, + 2049,82,2049,2583,1,367,1,11,2049,67,10,1,8398,2049,2065,2049,2908,10,1,8393, + 2049,2252,2049,367,10,8293,8438,147,115,58,101,118,97,108,117,97,116,101,0,2049, + 8319,2049,4655,2049,8319,2,2049,8341,2049,8391,10,8424,8456,134,76,80,0,0,8450,8466, + 134,73,110,100,101,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,8454,8599,147,110,101,120,116,0, - 3841,8453,1,8463,17,2049,3006,10,8591,8615,147,112,114,101,112,0,1,8453,2049,3006, - 1,0,3841,8453,1,8463,17,16,10,8607,8636,147,100,111,110,101,0,1,8453,2049, - 3021,10,8421,8646,147,73,0,3841,8453,1,8463,17,15,10,8641,8658,147,74,0,3841, - 8453,1,8463,17,2049,2918,15,10,8653,8672,147,75,0,3841,8453,1,8463,17,1,2, - 18,15,10,8667,8703,147,116,105,109,101,115,60,119,105,116,104,45,105,110,100, - 101,120,62,0,2049,8615,4,1793,8723,25,2049,2918,5,1,21,2049,2077,6,2049,8599, - 1,8708,7,10,1,8708,8,3,2049,8636,10,8682,8738,159,104,111,111,107,0,1, - 1793,2049,108,2049,1835,2049,2905,2049,108,10,8730,8761,147,115,101,116,45,104,111,111, - 107,0,2049,2905,16,10,8749,8775,147,117,110,104,111,111,107,0,2049,2905,2,2049, - 2905,4,16,10,8765,8799,147,105,111,58,101,110,117,109,101,114,97,116,101,0, - 27,10,8783,8813,147,105,111,58,113,117,101,114,121,0,28,10,8801,8828,147,105, - 111,58,105,110,118,111,107,101,0,29,10,8815,8838,134,83,108,111,116,0,0, - 8815,8854,147,105,111,58,115,99,97,110,45,102,111,114,0,1,-1,4097,8838,2049, - 8799,1793,8880,2049,8646,2049,8813,772,67502597,11,1793,8876,2049,8646,4097,8838,10,1,8871,9, - 10,1,8862,2049,8703,3,3841,8838,10,8839,8897,147,99,58,112,117,116,0,1793,8899, - 1,0,2049,8828,10,8888,8910,147,110,108,0,1,10,2049,8897,10,8904,8921,147,115, - 112,0,1,32,2049,8897,10,8915,8933,147,116,97,98,0,1,9,2049,8897,10,8926, - 8947,147,115,58,112,117,116,0,1,8897,2049,4020,10,8938,8961,147,110,58,112,117, - 116,0,2049,5991,2049,8947,10,8952,8977,147,100,58,119,111,114,100,115,0,1793,8986, - 2049,165,2049,8947,2049,8921,10,1,8979,2049,7002,10,8966,9000,147,114,101,115,101,116, - 0,2049,1556,25,5,3,6,1,1,18,1,9002,7,10,8991,9027,147,100,117,109, - 112,45,115,116,97,99,107,0,2049,1556,25,3,5,2049,9027,6,2,2049,8961,2049, - 8921,10,9013,9063,147,100,105,115,112,108,97,121,45,105,102,45,109,97,116,99, - 104,101,100,0,2,2049,1835,2049,4320,1793,9075,2049,8947,2049,8921,10,1,9070,1793,9081, - 3,10,1,9079,2049,67,10,9013,9102,147,100,58,119,111,114,100,115,45,119,105, - 116,104,0,2049,1835,2049,4652,1793,9113,2049,165,2049,9063,10,1,9108,2049,7002,10,9086, - 9126,147,70,82,69,69,0,2049,3565,1,1025,18,2049,1835,18,10,9118,9152,134,105, - 111,58,70,105,108,101,115,121,115,116,101,109,0,0,9135,9165,147,105,100,101, - 110,116,105,102,121,0,3841,9152,2049,2564,1793,9232,1,4,2049,8854,2,2049,2599,1793, - 9220,3,2049,3694,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,48, - 48,48,52,32,78,79,84,32,70,79,85,78,68,0,1,9183,2049,8947,2049,8910, - 10,1,9180,1793,9227,4097,9152,10,1,9224,2049,67,10,1,9171,9,10,9118,9257,147, - 105,111,58,102,105,108,101,45,111,112,101,114,97,116,105,111,110,0,2049,9165, - 3841,9152,2049,8828,10,9236,0,134,102,105,108,101,58,82,0,9264,1,134,102,105, - 108,101,58,87,0,9274,2,134,102,105,108,101,58,65,0,9284,3,134,102,105, - 108,101,58,82,43,0,9294,9318,147,102,105,108,101,58,111,112,101,110,0,1, - 0,2049,9257,10,9305,9337,147,102,105,108,101,58,99,108,111,115,101,0,1,1, - 2049,9257,10,9323,9355,147,102,105,108,101,58,114,101,97,100,0,1,2,2049,9257, - 10,9342,9374,147,102,105,108,101,58,119,114,105,116,101,0,1,3,2049,9257,10, - 9360,9392,147,102,105,108,101,58,116,101,108,108,0,1,4,2049,9257,10,9379,9410, - 147,102,105,108,101,58,115,101,101,107,0,1,5,2049,9257,10,9397,9428,147,102, - 105,108,101,58,115,105,122,101,0,1,6,2049,9257,10,9415,9448,147,102,105,108, - 101,58,100,101,108,101,116,101,0,1,7,2049,9257,10,9433,9467,147,102,105,108, - 101,58,102,108,117,115,104,0,1,8,2049,9257,10,9453,9488,147,102,105,108,101, - 58,101,120,105,115,116,115,63,0,1,0,2049,9318,2,2049,2580,1793,9502,2049,9337, - 2049,2428,10,1,9497,1793,9510,3,2049,2440,10,1,9506,2049,67,10,9472,9541,147,102, - 105,108,101,58,111,112,101,110,60,102,111,114,45,114,101,97,100,105,110,103, - 62,0,1,0,2049,9318,2,2049,9428,4,10,9515,9575,147,102,105,108,101,58,111, - 112,101,110,60,102,111,114,45,97,112,112,101,110,100,62,0,1,2,2049,9318, - 2,2049,9428,4,10,9550,9610,147,102,105,108,101,58,111,112,101,110,60,102,111, - 114,45,119,114,105,116,105,110,103,62,0,1,1,2049,9318,10,9584,9622,134,70, - 73,68,0,0,9615,9631,134,83,105,122,101,0,0,9623,9642,134,65,99,116,105, - 111,110,0,0,9632,9653,134,66,117,102,102,101,114,0,0,9643,9663,147,45,101, - 111,102,63,0,3841,9622,2049,9392,3841,9631,13,10,9654,9683,147,112,114,101,115,101, - 114,118,101,0,1,9622,1793,9698,1,9631,1793,9693,8,10,1,9691,2049,3104,10,1, - 9687,2049,3104,10,9584,9721,147,102,105,108,101,58,114,101,97,100,45,108,105,110, - 101,0,4097,9622,1793,9778,2049,1835,2,4097,9653,2049,3472,1793,9770,3841,9622,2049,9355,2, - 2049,3380,1793,9747,1,13,11,10,1,9743,1793,9755,1,10,11,10,1,9751,1793,9763, - 1,0,11,10,1,9759,2049,2129,22,22,10,1,9734,2049,2223,2049,3404,3,10,1, - 9725,2049,3496,3841,9653,10,9703,9807,147,102,105,108,101,58,102,111,114,45,101,97, - 99,104,45,108,105,110,101,0,1793,9838,4097,9642,2049,9541,4097,9622,4097,9631,1793,9829, - 3841,9622,2049,9721,3841,9642,8,2049,9663,10,1,9819,2049,2197,3841,9622,2049,9337,10,1, - 9809,2049,9683,10,9785,9850,134,70,73,68,0,0,9843,9859,134,83,105,122,101,0, - 0,9785,9874,147,102,105,108,101,58,115,108,117,114,112,0,1793,9904,2049,9541,4097, - 9850,4097,9859,2049,3472,3841,9859,1793,9895,3841,9850,2049,9355,2049,3380,10,1,9888,2049,2252, - 3841,9850,2049,9337,10,1,9876,2049,3496,10,9860,9916,134,70,73,68,0,0,9860,9930, - 147,102,105,108,101,58,115,112,101,119,0,2049,9610,4097,9916,1793,9941,3841,9916,2049, - 9374,10,1,9936,2049,4020,3841,9916,2049,9337,10,9917,9963,134,105,111,58,71,111,112, - 104,101,114,0,0,9950,9976,147,105,100,101,110,116,105,102,121,0,3841,9963,2049, - 2564,1793,10043,1,5,2049,8854,2,2049,2599,1793,10031,3,2049,3694,73,79,32,68,69, - 86,73,67,69,32,84,89,80,69,32,48,48,48,53,32,78,79,84,32,70, - 79,85,78,68,0,1,9994,2049,8947,2049,8910,10,1,9991,1793,10038,4097,9963,10,1, - 10035,2049,67,10,1,9982,9,10,9917,10061,147,103,111,112,104,101,114,58,103,101, - 116,0,2049,9976,1,0,3841,9963,2049,8828,10,10047,10090,134,105,111,58,70,108,111, - 97,116,105,110,103,80,111,105,110,116,0,0,10070,10103,147,105,100,101,110,116, - 105,102,121,0,3841,10090,2049,2564,1793,10170,1,2,2049,8854,2,2049,2599,1793,10158,3, - 2049,3694,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,48,48,48, - 50,32,78,79,84,32,70,79,85,78,68,0,1,10121,2049,8947,2049,8910,10,1, - 10118,1793,10165,4097,10090,10,1,10162,2049,67,10,1,10109,9,10,10047,10196,147,105,111, - 58,102,108,111,97,116,45,111,112,101,114,97,116,105,111,110,0,2049,10103,3841, - 10090,2049,8828,10,10174,10217,147,110,58,116,111,45,102,108,111,97,116,0,1,0, - 2049,10196,10,10203,10236,147,115,58,116,111,45,102,108,111,97,116,0,1,1,2049, - 10196,10,10222,10256,147,102,58,116,111,45,110,117,109,98,101,114,0,1,2,2049, - 10196,10,10241,10276,147,102,58,116,111,45,115,116,114,105,110,103,0,2049,3675,2, - 1,3,2049,10196,10,10261,10291,147,102,58,43,0,1,4,2049,10196,10,10284,10303,147, - 102,58,45,0,1,5,2049,10196,10,10296,10315,147,102,58,42,0,1,6,2049,10196, - 10,10308,10327,147,102,58,47,0,1,7,2049,10196,10,10320,10343,147,102,58,102,108, - 111,111,114,0,1,8,2049,10196,10,10332,10361,147,102,58,99,101,105,108,105,110, - 103,0,1,9,2049,10196,10,10348,10376,147,102,58,115,113,114,116,0,1,10,2049, - 10196,10,10366,10390,147,102,58,101,113,63,0,1,11,2049,10196,10,10381,10405,147,102, - 58,45,101,113,63,0,1,12,2049,10196,10,10395,10419,147,102,58,108,116,63,0, - 1,13,2049,10196,10,10410,10433,147,102,58,103,116,63,0,1,14,2049,10196,10,10424, - 10449,147,102,58,100,101,112,116,104,0,1,15,2049,10196,10,10438,10463,147,102,58, - 100,117,112,0,1,16,2049,10196,10,10454,10478,147,102,58,100,114,111,112,0,1, - 17,2049,10196,10,10468,10493,147,102,58,115,119,97,112,0,1,18,2049,10196,10,10483, - 10507,147,102,58,108,111,103,0,1,19,2049,10196,10,10498,10523,147,102,58,112,111, - 119,101,114,0,1,20,2049,10196,10,10512,10537,147,102,58,115,105,110,0,1,21, - 2049,10196,10,10528,10551,147,102,58,99,111,115,0,1,22,2049,10196,10,10542,10565,147, - 102,58,116,97,110,0,1,23,2049,10196,10,10556,10580,147,102,58,97,115,105,110, - 0,1,24,2049,10196,10,10570,10595,147,102,58,97,99,111,115,0,1,25,2049,10196, - 10,10585,10610,147,102,58,97,116,97,110,0,1,26,2049,10196,10,10600,10625,147,102, - 58,112,117,115,104,0,1,27,2049,10196,10,10615,10639,147,102,58,112,111,112,0, - 1,28,2049,10196,10,10630,10656,147,102,58,115,113,117,97,114,101,0,2049,10463,2049, - 10315,10,10644,10671,147,102,58,111,118,101,114,0,2049,10625,2049,10463,2049,10639,2049,10493, - 10,10661,10690,147,102,58,116,117,99,107,0,2049,10463,2049,10625,2049,10493,10,10680,10706, - 147,102,58,110,105,112,0,2049,10493,2049,10478,10,10697,10726,147,102,58,100,114,111, - 112,45,112,97,105,114,0,2049,10478,2049,10478,10,10711,10745,147,102,58,100,117,112, - 45,112,97,105,114,0,2049,10671,2049,10671,10,10731,10759,147,102,58,114,111,116,0, - 2049,10625,2049,10493,2049,10639,2049,10493,10,10750,10783,147,102,58,112,111,115,105,116,105, - 118,101,63,0,1,0,2049,10217,2049,10433,10,10768,10805,147,102,58,110,101,103,97, - 116,105,118,101,63,0,1,0,2049,10217,2049,10419,10,10790,10824,147,102,58,110,101, - 103,97,116,101,0,1,-1,2049,10217,2049,10315,10,10812,10840,147,102,58,97,98,115, - 0,2049,10463,2049,10805,1793,10849,2049,10824,10,1,10846,9,10,10831,10865,159,112,114,101, - 102,105,120,58,46,0,2049,1806,1793,10872,2049,3720,10,1,10869,1793,10879,2049,3649,10, - 1,10876,2049,67,1,10236,2049,147,10,10853,10897,147,102,58,112,117,116,0,2049,10276, - 2049,8947,10,10888,10910,147,102,58,80,73,0,2049,3694,51,46,49,52,49,53,57, - 50,0,1,10912,2049,10236,10,10902,10933,147,102,58,69,0,2049,3694,50,46,55,49, - 56,50,56,49,0,1,10935,2049,10236,10,10926,10958,147,102,58,78,65,78,0,2049, - 3694,48,0,1,10960,2049,10236,2049,3694,48,0,1,10968,2049,10236,2049,10327,10,10949,10986, - 147,102,58,73,78,70,0,2049,3694,49,46,48,0,1,10988,2049,10236,2049,3694,48, - 0,1,10998,2049,10236,2049,10327,10,10977,11017,147,102,58,45,73,78,70,0,2049,3694, - 45,49,46,48,0,1,11019,2049,10236,2049,3694,48,0,1,11030,2049,10236,2049,10327,10, - 11007,11049,147,102,58,110,97,110,63,0,2049,10463,2049,10405,10,11039,11064,147,102,58, - 105,110,102,63,0,2049,10986,2049,10390,10,11054,11080,147,102,58,45,105,110,102,63, - 0,2049,11017,2049,10390,10,11069,11096,147,102,58,114,111,117,110,100,0,2049,10463,2049, - 10805,1793,11117,2049,3694,48,46,53,0,1,11104,2049,10236,2049,10303,2049,10361,10,1,11102, - 1793,11136,2049,3694,48,46,53,0,1,11123,2049,10236,2049,10291,2049,10343,10,1,11121,2049, - 67,10,11085,11150,147,102,58,109,105,110,0,2049,10745,2049,10419,1,10478,1,10706,2049, - 67,10,11141,11170,147,102,58,109,97,120,0,2049,10745,2049,10433,1,10478,1,10706,2049, - 67,10,11161,11192,147,102,58,108,105,109,105,116,0,2049,10493,2049,10625,2049,11150,2049, - 10639,2049,11170,10,11181,11217,147,102,58,98,101,116,119,101,101,110,63,0,2049,10759, - 2049,10463,2049,10625,2049,10759,2049,10759,2049,11192,2049,10639,2049,10390,10,11203,11243,147,102,58, - 105,110,99,0,2049,3694,49,0,1,11245,2049,10236,2049,10291,10,11234,11263,147,102,58, - 100,101,99,0,2049,3694,49,0,1,11265,2049,10236,2049,10303,10,11254,11284,147,102,58, - 99,97,115,101,0,2049,10671,2049,10390,1793,11296,2049,10478,8,1,-1,10,1,11290,1793, - 11304,3,1,0,10,1,11300,2049,67,25,6,771,10,11274,2147483646,134,117,58,77,65, - 88,0,11312,-2147483646,134,117,58,77,73,78,0,11321,-2147483648,134,117,58,78,65,78,0, - 11330,2147483647,134,117,58,73,78,70,0,11339,-2147483647,134,117,58,45,73,78,70,0,11348, - 11366,147,117,58,110,63,0,1,-2147483646,2049,2905,1,2147483646,2049,2918,2049,2936,10,11358,11387, - 147,117,58,109,97,120,63,0,1,2147483646,11,10,11377,11401,147,117,58,109,105,110, - 63,0,1,-2147483646,11,10,11391,11416,147,117,58,122,101,114,111,63,0,2049,2564,10, - 11405,11429,147,117,58,110,97,110,63,0,1,-2147483648,11,10,11419,11443,147,117,58,105, - 110,102,63,0,1,2147483647,11,10,11433,11458,147,117,58,45,105,110,102,63,0,1, - -2147483647,11,10,11447,11472,147,117,58,99,108,105,112,0,1,-2147483646,1,2147483646,2049,2888,10, - 11462,11484,147,115,0,2049,3694,49,48,46,48,101,45,52,0,1,11486,2049,10236,10, - 11479,11511,147,102,58,101,110,99,111,100,101,0,2049,3694,48,46,53,0,1,11513, - 2049,10236,2049,10523,2049,11484,2049,3694,45,49,46,48,0,1,11527,2049,10236,2049,10523,2049, - 10315,10,11499,11553,147,102,58,100,101,99,111,100,101,0,2049,10656,2049,11484,2049,10656, - 2049,10315,10,11462,11572,147,102,58,116,111,45,117,0,2049,10463,2049,11511,2049,11096,2049, - 10256,2049,11472,2049,10463,2049,11049,1793,11592,3,1,-2147483648,10,1,11588,9,2049,10463,2049,11064, - 1793,11605,3,1,2147483647,10,1,11601,9,2049,10463,2049,11080,1793,11618,3,1,-2147483647,10,1, - 11614,9,2049,10478,10,11562,11634,147,117,58,116,111,45,102,0,2049,10217,2049,11553,10, - 11624,11649,147,117,58,116,111,45,102,0,2,2049,10217,2049,11553,2,2049,11429,1793,11664, - 2049,10478,2049,10958,10,1,11659,9,2,2049,11443,1793,11677,2049,10478,2049,10986,10,1,11672, - 9,2,2049,11458,1793,11690,2049,10478,2049,11017,10,1,11685,9,3,10,11639,11706,147,102, - 58,115,116,111,114,101,0,1793,11711,2049,11572,10,1,11708,2049,2065,16,10,11695,11728, - 147,102,58,102,101,116,99,104,0,15,2049,11649,10,11717,11748,147,102,58,100,117, - 109,112,45,115,116,97,99,107,0,2049,10449,2,1793,11756,2049,10625,10,1,11753,2049, - 2252,1793,11771,2049,10639,2049,10463,2049,10897,2049,8921,10,1,11762,2049,2252,10,11732,11794,134, - 105,111,58,85,110,105,120,83,121,115,99,97,108,108,0,0,11776,11807,147,105, - 100,101,110,116,105,102,121,0,3841,11794,2049,2564,1793,11874,1,8,2049,8854,2,2049, - 2599,1793,11862,3,2049,3694,73,79,32,68,69,86,73,67,69,32,84,89,80,69, - 32,48,48,48,56,32,78,79,84,32,70,79,85,78,68,0,1,11825,2049,8947, - 2049,8910,10,1,11822,1793,11869,4097,11794,10,1,11866,2049,67,10,1,11813,9,10,11732, - 11897,147,105,111,58,117,110,105,120,45,115,121,115,99,97,108,108,0,2049,11807, - 3841,11794,2049,8828,10,11878,11919,147,117,110,105,120,58,115,121,115,116,101,109,0, - 1,0,2049,11897,10,11904,11937,147,117,110,105,120,58,102,111,114,107,0,1,1, - 2049,11897,10,11924,11956,147,117,110,105,120,58,101,120,101,99,48,0,1,2,2049, - 11897,10,11942,11975,147,117,110,105,120,58,101,120,101,99,49,0,1,3,2049,11897, - 10,11961,11994,147,117,110,105,120,58,101,120,101,99,50,0,1,4,2049,11897,10, - 11980,12013,147,117,110,105,120,58,101,120,101,99,51,0,1,5,2049,11897,10,11999, - 12031,147,117,110,105,120,58,101,120,105,116,0,1,6,2049,11897,10,12018,12051,147, - 117,110,105,120,58,103,101,116,112,105,100,0,1,7,2049,11897,10,12036,12069,147, - 117,110,105,120,58,119,97,105,116,0,1,8,2049,11897,10,12056,12087,147,117,110, - 105,120,58,107,105,108,108,0,1,9,2049,11897,10,12074,12106,147,117,110,105,120, - 58,112,111,112,101,110,0,1,10,2049,11897,10,12092,12126,147,117,110,105,120,58, - 112,99,108,111,115,101,0,1,11,2049,11897,10,12111,12145,147,117,110,105,120,58, - 119,114,105,116,101,0,1793,12151,2,2049,82,10,1,12147,2049,2065,1,12,2049,11897, - 10,12131,12174,147,117,110,105,120,58,99,104,100,105,114,0,1,13,2049,11897,10, - 12160,12194,147,117,110,105,120,58,103,101,116,101,110,118,0,1,14,2049,11897,10, - 12179,12214,147,117,110,105,120,58,112,117,116,101,110,118,0,1,15,2049,11897,10, - 12199,12233,147,117,110,105,120,58,115,108,101,101,112,0,1,16,2049,11897,10,12219, - 12255,147,117,110,105,120,58,105,111,58,110,58,112,117,116,0,1,17,2049,11897, - 10,12238,12277,147,117,110,105,120,58,105,111,58,115,58,112,117,116,0,1,18, - 2049,11897,10,12260,12297,147,114,97,110,100,111,109,58,98,121,116,101,0,2049,3694, - 47,100,101,118,47,117,114,97,110,100,111,109,0,1,12299,1,0,2049,9318,1, - 9355,2049,2077,2049,9337,10,12260,12337,147,110,58,114,97,110,100,111,109,0,2049,12297, - 1,-8,24,2049,12297,17,1,-8,24,2049,12297,17,1,8,24,2049,12297,17,10,12325, - 12363,134,107,0,0,12358,12369,134,116,0,0,12364,12376,134,115,48,0,0,12370,12383, - 134,115,49,0,0,12377,12390,134,115,50,0,0,12384,12397,134,115,51,0,0,12391, - 12406,147,115,101,101,100,0,2,4097,12363,2,4097,12369,2,4097,12383,2,4097,12390,4097, - 12397,10,12398,12429,147,114,111,116,108,0,4097,12363,1793,12439,3841,12363,2049,2756,24,10, - 1,12433,1793,12450,1,32,3841,12363,18,24,10,1,12443,2049,2092,22,10,12421,12465,147, - 114,101,115,42,42,0,3841,12376,1,5,19,1,7,2049,12429,1,9,19,10,12325, - 12503,147,114,97,110,100,111,109,58,120,111,114,111,115,104,105,114,111,49,50, - 56,42,42,0,3841,12383,2,1,-9,24,5,3841,12397,3841,12376,3841,12390,386269701,1285,386269701, - 100926980,85394690,386269701,386270726,4097,12390,4097,12383,4097,12376,1,11,2049,12429,4097,12397,2049,12465,10,12478, - 12572,147,114,97,110,100,111,109,58,120,111,114,111,115,104,105,114,111,49,50, - 56,42,42,58,115,101,116,45,115,101,101,100,0,2049,12406,1,100,1793,12582,2049, - 12503,3,10,1,12578,2049,2252,10,12538,12597,134,83,116,97,116,101,115,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8457,8602,147,110,101, + 120,116,0,3841,8456,1,8466,17,2049,3009,10,8594,8618,147,112,114,101,112,0,1, + 8456,2049,3009,1,0,3841,8456,1,8466,17,16,10,8610,8639,147,100,111,110,101,0, + 1,8456,2049,3024,10,8424,8649,147,73,0,3841,8456,1,8466,17,15,10,8644,8661,147, + 74,0,3841,8456,1,8466,17,2049,2921,15,10,8656,8675,147,75,0,3841,8456,1,8466, + 17,1,2,18,15,10,8670,8706,147,116,105,109,101,115,60,119,105,116,104,45, + 105,110,100,101,120,62,0,2049,8618,4,1793,8726,25,2049,2921,5,1,21,2049,2077, + 6,2049,8602,1,8711,7,10,1,8711,8,3,2049,8639,10,8685,8741,159,104,111,111, + 107,0,1,1793,2049,108,2049,1835,2049,2908,2049,108,10,8733,8764,147,115,101,116,45, + 104,111,111,107,0,2049,2908,16,10,8752,8778,147,117,110,104,111,111,107,0,2049, + 2908,2,2049,2908,4,16,10,8768,8802,147,105,111,58,101,110,117,109,101,114,97, + 116,101,0,27,10,8786,8816,147,105,111,58,113,117,101,114,121,0,28,10,8804, + 8831,147,105,111,58,105,110,118,111,107,101,0,29,10,8818,8841,134,83,108,111, + 116,0,0,8818,8857,147,105,111,58,115,99,97,110,45,102,111,114,0,1,-1, + 4097,8841,2049,8802,1793,8883,2049,8649,2049,8816,772,67502597,11,1793,8879,2049,8649,4097,8841,10, + 1,8874,9,10,1,8865,2049,8706,3,3841,8841,10,8842,8900,147,99,58,112,117,116, + 0,1793,8902,1,0,2049,8831,10,8891,8913,147,110,108,0,1,10,2049,8900,10,8907, + 8924,147,115,112,0,1,32,2049,8900,10,8918,8936,147,116,97,98,0,1,9,2049, + 8900,10,8929,8950,147,115,58,112,117,116,0,1,8900,2049,4023,10,8941,8964,147,110, + 58,112,117,116,0,2049,5994,2049,8950,10,8955,8980,147,100,58,119,111,114,100,115, + 0,1793,8989,2049,165,2049,8950,2049,8924,10,1,8982,2049,7005,10,8969,9003,147,114,101, + 115,101,116,0,2049,1556,25,5,3,6,1,1,18,1,9005,7,10,8994,9030,147, + 100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,3,5,2049,9030,6,2, + 2049,8964,2049,8924,10,9016,9066,147,100,105,115,112,108,97,121,45,105,102,45,109, + 97,116,99,104,101,100,0,2,2049,1835,2049,4323,1793,9078,2049,8950,2049,8924,10,1, + 9073,1793,9084,3,10,1,9082,2049,67,10,9016,9105,147,100,58,119,111,114,100,115, + 45,119,105,116,104,0,2049,1835,2049,4655,1793,9116,2049,165,2049,9066,10,1,9111,2049, + 7005,10,9089,9129,147,70,82,69,69,0,2049,3568,1,1025,18,2049,1835,18,10,9121, + 9155,134,105,111,58,70,105,108,101,115,121,115,116,101,109,0,0,9138,9168,147, + 105,100,101,110,116,105,102,121,0,3841,9155,2049,2567,1793,9235,1,4,2049,8857,2, + 2049,2602,1793,9223,3,2049,3697,73,79,32,68,69,86,73,67,69,32,84,89,80, + 69,32,48,48,48,52,32,78,79,84,32,70,79,85,78,68,0,1,9186,2049, + 8950,2049,8913,10,1,9183,1793,9230,4097,9155,10,1,9227,2049,67,10,1,9174,9,10, + 9121,9260,147,105,111,58,102,105,108,101,45,111,112,101,114,97,116,105,111,110, + 0,2049,9168,3841,9155,2049,8831,10,9239,0,134,102,105,108,101,58,82,0,9267,1, + 134,102,105,108,101,58,87,0,9277,2,134,102,105,108,101,58,65,0,9287,3, + 134,102,105,108,101,58,82,43,0,9297,9321,147,102,105,108,101,58,111,112,101, + 110,0,1,0,2049,9260,10,9308,9340,147,102,105,108,101,58,99,108,111,115,101, + 0,1,1,2049,9260,10,9326,9358,147,102,105,108,101,58,114,101,97,100,0,1, + 2,2049,9260,10,9345,9377,147,102,105,108,101,58,119,114,105,116,101,0,1,3, + 2049,9260,10,9363,9395,147,102,105,108,101,58,116,101,108,108,0,1,4,2049,9260, + 10,9382,9413,147,102,105,108,101,58,115,101,101,107,0,1,5,2049,9260,10,9400, + 9431,147,102,105,108,101,58,115,105,122,101,0,1,6,2049,9260,10,9418,9451,147, + 102,105,108,101,58,100,101,108,101,116,101,0,1,7,2049,9260,10,9436,9470,147, + 102,105,108,101,58,102,108,117,115,104,0,1,8,2049,9260,10,9456,9491,147,102, + 105,108,101,58,101,120,105,115,116,115,63,0,1,0,2049,9321,2,2049,2583,1793, + 9505,2049,9340,2049,2428,10,1,9500,1793,9513,3,2049,2440,10,1,9509,2049,67,10,9475, + 9544,147,102,105,108,101,58,111,112,101,110,60,102,111,114,45,114,101,97,100, + 105,110,103,62,0,1,0,2049,9321,2,2049,9431,4,10,9518,9578,147,102,105,108, + 101,58,111,112,101,110,60,102,111,114,45,97,112,112,101,110,100,62,0,1, + 2,2049,9321,2,2049,9431,4,10,9553,9613,147,102,105,108,101,58,111,112,101,110, + 60,102,111,114,45,119,114,105,116,105,110,103,62,0,1,1,2049,9321,10,9587, + 9625,134,70,73,68,0,0,9618,9634,134,83,105,122,101,0,0,9626,9645,134,65, + 99,116,105,111,110,0,0,9635,9656,134,66,117,102,102,101,114,0,0,9646,9666, + 147,45,101,111,102,63,0,3841,9625,2049,9395,3841,9634,13,10,9657,9686,147,112,114, + 101,115,101,114,118,101,0,1,9625,1793,9701,1,9634,1793,9696,8,10,1,9694,2049, + 3107,10,1,9690,2049,3107,10,9587,9724,147,102,105,108,101,58,114,101,97,100,45, + 108,105,110,101,0,4097,9625,1793,9781,2049,1835,2,4097,9656,2049,3475,1793,9773,3841,9625, + 2049,9358,2,2049,3383,1793,9750,1,13,11,10,1,9746,1793,9758,1,10,11,10,1, + 9754,1793,9766,1,0,11,10,1,9762,2049,2129,22,22,10,1,9737,2049,2223,2049,3407, + 3,10,1,9728,2049,3499,3841,9656,10,9706,9810,147,102,105,108,101,58,102,111,114, + 45,101,97,99,104,45,108,105,110,101,0,1793,9841,4097,9645,2049,9544,4097,9625,4097, + 9634,1793,9832,3841,9625,2049,9724,3841,9645,8,2049,9666,10,1,9822,2049,2197,3841,9625,2049, + 9340,10,1,9812,2049,9686,10,9788,9853,134,70,73,68,0,0,9846,9862,134,83,105, + 122,101,0,0,9788,9877,147,102,105,108,101,58,115,108,117,114,112,0,1793,9907, + 2049,9544,4097,9853,4097,9862,2049,3475,3841,9862,1793,9898,3841,9853,2049,9358,2049,3383,10,1, + 9891,2049,2252,3841,9853,2049,9340,10,1,9879,2049,3499,10,9863,9919,134,70,73,68,0, + 0,9863,9933,147,102,105,108,101,58,115,112,101,119,0,2049,9613,4097,9919,1793,9944, + 3841,9919,2049,9377,10,1,9939,2049,4023,3841,9919,2049,9340,10,9920,9966,134,105,111,58, + 71,111,112,104,101,114,0,0,9953,9979,147,105,100,101,110,116,105,102,121,0, + 3841,9966,2049,2567,1793,10046,1,5,2049,8857,2,2049,2602,1793,10034,3,2049,3697,73,79, + 32,68,69,86,73,67,69,32,84,89,80,69,32,48,48,48,53,32,78,79, + 84,32,70,79,85,78,68,0,1,9997,2049,8950,2049,8913,10,1,9994,1793,10041,4097, + 9966,10,1,10038,2049,67,10,1,9985,9,10,9920,10064,147,103,111,112,104,101,114, + 58,103,101,116,0,2049,9979,1,0,3841,9966,2049,8831,10,10050,10093,134,105,111,58, + 70,108,111,97,116,105,110,103,80,111,105,110,116,0,0,10073,10106,147,105,100, + 101,110,116,105,102,121,0,3841,10093,2049,2567,1793,10173,1,2,2049,8857,2,2049,2602, + 1793,10161,3,2049,3697,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32, + 48,48,48,50,32,78,79,84,32,70,79,85,78,68,0,1,10124,2049,8950,2049, + 8913,10,1,10121,1793,10168,4097,10093,10,1,10165,2049,67,10,1,10112,9,10,10050,10199, + 147,105,111,58,102,108,111,97,116,45,111,112,101,114,97,116,105,111,110,0, + 2049,10106,3841,10093,2049,8831,10,10177,10220,147,110,58,116,111,45,102,108,111,97,116, + 0,1,0,2049,10199,10,10206,10239,147,115,58,116,111,45,102,108,111,97,116,0, + 1,1,2049,10199,10,10225,10259,147,102,58,116,111,45,110,117,109,98,101,114,0, + 1,2,2049,10199,10,10244,10279,147,102,58,116,111,45,115,116,114,105,110,103,0, + 2049,3678,2,1,3,2049,10199,10,10264,10294,147,102,58,43,0,1,4,2049,10199,10, + 10287,10306,147,102,58,45,0,1,5,2049,10199,10,10299,10318,147,102,58,42,0,1, + 6,2049,10199,10,10311,10330,147,102,58,47,0,1,7,2049,10199,10,10323,10346,147,102, + 58,102,108,111,111,114,0,1,8,2049,10199,10,10335,10364,147,102,58,99,101,105, + 108,105,110,103,0,1,9,2049,10199,10,10351,10379,147,102,58,115,113,114,116,0, + 1,10,2049,10199,10,10369,10393,147,102,58,101,113,63,0,1,11,2049,10199,10,10384, + 10408,147,102,58,45,101,113,63,0,1,12,2049,10199,10,10398,10422,147,102,58,108, + 116,63,0,1,13,2049,10199,10,10413,10436,147,102,58,103,116,63,0,1,14,2049, + 10199,10,10427,10452,147,102,58,100,101,112,116,104,0,1,15,2049,10199,10,10441,10466, + 147,102,58,100,117,112,0,1,16,2049,10199,10,10457,10481,147,102,58,100,114,111, + 112,0,1,17,2049,10199,10,10471,10496,147,102,58,115,119,97,112,0,1,18,2049, + 10199,10,10486,10510,147,102,58,108,111,103,0,1,19,2049,10199,10,10501,10526,147,102, + 58,112,111,119,101,114,0,1,20,2049,10199,10,10515,10540,147,102,58,115,105,110, + 0,1,21,2049,10199,10,10531,10554,147,102,58,99,111,115,0,1,22,2049,10199,10, + 10545,10568,147,102,58,116,97,110,0,1,23,2049,10199,10,10559,10583,147,102,58,97, + 115,105,110,0,1,24,2049,10199,10,10573,10598,147,102,58,97,99,111,115,0,1, + 25,2049,10199,10,10588,10613,147,102,58,97,116,97,110,0,1,26,2049,10199,10,10603, + 10628,147,102,58,112,117,115,104,0,1,27,2049,10199,10,10618,10642,147,102,58,112, + 111,112,0,1,28,2049,10199,10,10633,10659,147,102,58,115,113,117,97,114,101,0, + 2049,10466,2049,10318,10,10647,10674,147,102,58,111,118,101,114,0,2049,10628,2049,10466,2049, + 10642,2049,10496,10,10664,10693,147,102,58,116,117,99,107,0,2049,10466,2049,10628,2049,10496, + 10,10683,10709,147,102,58,110,105,112,0,2049,10496,2049,10481,10,10700,10729,147,102,58, + 100,114,111,112,45,112,97,105,114,0,2049,10481,2049,10481,10,10714,10748,147,102,58, + 100,117,112,45,112,97,105,114,0,2049,10674,2049,10674,10,10734,10762,147,102,58,114, + 111,116,0,2049,10628,2049,10496,2049,10642,2049,10496,10,10753,10786,147,102,58,112,111,115, + 105,116,105,118,101,63,0,1,0,2049,10220,2049,10436,10,10771,10808,147,102,58,110, + 101,103,97,116,105,118,101,63,0,1,0,2049,10220,2049,10422,10,10793,10827,147,102, + 58,110,101,103,97,116,101,0,1,-1,2049,10220,2049,10318,10,10815,10843,147,102,58, + 97,98,115,0,2049,10466,2049,10808,1793,10852,2049,10827,10,1,10849,9,10,10834,10868,159, + 112,114,101,102,105,120,58,46,0,2049,1806,1793,10875,2049,3723,10,1,10872,1793,10882, + 2049,3652,10,1,10879,2049,67,1,10239,2049,147,10,10856,10900,147,102,58,112,117,116, + 0,2049,10279,2049,8950,10,10891,10913,147,102,58,80,73,0,2049,3697,51,46,49,52, + 49,53,57,50,0,1,10915,2049,10239,10,10905,10936,147,102,58,69,0,2049,3697,50, + 46,55,49,56,50,56,49,0,1,10938,2049,10239,10,10929,10961,147,102,58,78,65, + 78,0,2049,3697,48,0,1,10963,2049,10239,2049,3697,48,0,1,10971,2049,10239,2049,10330, + 10,10952,10989,147,102,58,73,78,70,0,2049,3697,49,46,48,0,1,10991,2049,10239, + 2049,3697,48,0,1,11001,2049,10239,2049,10330,10,10980,11020,147,102,58,45,73,78,70, + 0,2049,3697,45,49,46,48,0,1,11022,2049,10239,2049,3697,48,0,1,11033,2049,10239, + 2049,10330,10,11010,11052,147,102,58,110,97,110,63,0,2049,10466,2049,10408,10,11042,11067, + 147,102,58,105,110,102,63,0,2049,10989,2049,10393,10,11057,11083,147,102,58,45,105, + 110,102,63,0,2049,11020,2049,10393,10,11072,11099,147,102,58,114,111,117,110,100,0, + 2049,10466,2049,10808,1793,11120,2049,3697,48,46,53,0,1,11107,2049,10239,2049,10306,2049,10364, + 10,1,11105,1793,11139,2049,3697,48,46,53,0,1,11126,2049,10239,2049,10294,2049,10346,10, + 1,11124,2049,67,10,11088,11153,147,102,58,109,105,110,0,2049,10748,2049,10422,1,10481, + 1,10709,2049,67,10,11144,11173,147,102,58,109,97,120,0,2049,10748,2049,10436,1,10481, + 1,10709,2049,67,10,11164,11195,147,102,58,108,105,109,105,116,0,2049,10496,2049,10628, + 2049,11153,2049,10642,2049,11173,10,11184,11220,147,102,58,98,101,116,119,101,101,110,63, + 0,2049,10762,2049,10466,2049,10628,2049,10762,2049,10762,2049,11195,2049,10642,2049,10393,10,11206,11246, + 147,102,58,105,110,99,0,2049,3697,49,0,1,11248,2049,10239,2049,10294,10,11237,11266, + 147,102,58,100,101,99,0,2049,3697,49,0,1,11268,2049,10239,2049,10306,10,11257,11287, + 147,102,58,99,97,115,101,0,2049,10674,2049,10393,1793,11299,2049,10481,8,1,-1,10, + 1,11293,1793,11307,3,1,0,10,1,11303,2049,67,25,6,771,10,11277,2147483646,134,117, + 58,77,65,88,0,11315,-2147483646,134,117,58,77,73,78,0,11324,-2147483648,134,117,58,78, + 65,78,0,11333,2147483647,134,117,58,73,78,70,0,11342,-2147483647,134,117,58,45,73,78, + 70,0,11351,11369,147,117,58,110,63,0,1,-2147483646,2049,2908,1,2147483646,2049,2921,2049,2939, + 10,11361,11390,147,117,58,109,97,120,63,0,1,2147483646,11,10,11380,11404,147,117,58, + 109,105,110,63,0,1,-2147483646,11,10,11394,11419,147,117,58,122,101,114,111,63,0, + 2049,2567,10,11408,11432,147,117,58,110,97,110,63,0,1,-2147483648,11,10,11422,11446,147, + 117,58,105,110,102,63,0,1,2147483647,11,10,11436,11461,147,117,58,45,105,110,102, + 63,0,1,-2147483647,11,10,11450,11475,147,117,58,99,108,105,112,0,1,-2147483646,1,2147483646, + 2049,2891,10,11465,11487,147,115,0,2049,3697,49,48,46,48,101,45,52,0,1,11489, + 2049,10239,10,11482,11514,147,102,58,101,110,99,111,100,101,0,2049,3697,48,46,53, + 0,1,11516,2049,10239,2049,10526,2049,11487,2049,3697,45,49,46,48,0,1,11530,2049,10239, + 2049,10526,2049,10318,10,11502,11556,147,102,58,100,101,99,111,100,101,0,2049,10659,2049, + 11487,2049,10659,2049,10318,10,11465,11575,147,102,58,116,111,45,117,0,2049,10466,2049,11514, + 2049,11099,2049,10259,2049,11475,2049,10466,2049,11052,1793,11595,3,1,-2147483648,10,1,11591,9,2049, + 10466,2049,11067,1793,11608,3,1,2147483647,10,1,11604,9,2049,10466,2049,11083,1793,11621,3,1, + -2147483647,10,1,11617,9,2049,10481,10,11565,11637,147,117,58,116,111,45,102,0,2049,10220, + 2049,11556,10,11627,11652,147,117,58,116,111,45,102,0,2,2049,10220,2049,11556,2,2049, + 11432,1793,11667,2049,10481,2049,10961,10,1,11662,9,2,2049,11446,1793,11680,2049,10481,2049,10989, + 10,1,11675,9,2,2049,11461,1793,11693,2049,10481,2049,11020,10,1,11688,9,3,10,11642, + 11709,147,102,58,115,116,111,114,101,0,1793,11714,2049,11575,10,1,11711,2049,2065,16, + 10,11698,11731,147,102,58,102,101,116,99,104,0,15,2049,11652,10,11720,11751,147,102, + 58,100,117,109,112,45,115,116,97,99,107,0,2049,10452,2,1793,11759,2049,10628,10, + 1,11756,2049,2252,1793,11774,2049,10642,2049,10466,2049,10900,2049,8924,10,1,11765,2049,2252,10, + 11735,11797,134,105,111,58,85,110,105,120,83,121,115,99,97,108,108,0,0,11779, + 11810,147,105,100,101,110,116,105,102,121,0,3841,11797,2049,2567,1793,11877,1,8,2049, + 8857,2,2049,2602,1793,11865,3,2049,3697,73,79,32,68,69,86,73,67,69,32,84, + 89,80,69,32,48,48,48,56,32,78,79,84,32,70,79,85,78,68,0,1, + 11828,2049,8950,2049,8913,10,1,11825,1793,11872,4097,11797,10,1,11869,2049,67,10,1,11816, + 9,10,11735,11900,147,105,111,58,117,110,105,120,45,115,121,115,99,97,108,108, + 0,2049,11810,3841,11797,2049,8831,10,11881,11922,147,117,110,105,120,58,115,121,115,116, + 101,109,0,1,0,2049,11900,10,11907,11940,147,117,110,105,120,58,102,111,114,107, + 0,1,1,2049,11900,10,11927,11959,147,117,110,105,120,58,101,120,101,99,48,0, + 1,2,2049,11900,10,11945,11978,147,117,110,105,120,58,101,120,101,99,49,0,1, + 3,2049,11900,10,11964,11997,147,117,110,105,120,58,101,120,101,99,50,0,1,4, + 2049,11900,10,11983,12016,147,117,110,105,120,58,101,120,101,99,51,0,1,5,2049, + 11900,10,12002,12034,147,117,110,105,120,58,101,120,105,116,0,1,6,2049,11900,10, + 12021,12054,147,117,110,105,120,58,103,101,116,112,105,100,0,1,7,2049,11900,10, + 12039,12072,147,117,110,105,120,58,119,97,105,116,0,1,8,2049,11900,10,12059,12090, + 147,117,110,105,120,58,107,105,108,108,0,1,9,2049,11900,10,12077,12109,147,117, + 110,105,120,58,112,111,112,101,110,0,1,10,2049,11900,10,12095,12129,147,117,110, + 105,120,58,112,99,108,111,115,101,0,1,11,2049,11900,10,12114,12148,147,117,110, + 105,120,58,119,114,105,116,101,0,1793,12154,2,2049,82,10,1,12150,2049,2065,1, + 12,2049,11900,10,12134,12177,147,117,110,105,120,58,99,104,100,105,114,0,1,13, + 2049,11900,10,12163,12197,147,117,110,105,120,58,103,101,116,101,110,118,0,1,14, + 2049,11900,10,12182,12217,147,117,110,105,120,58,112,117,116,101,110,118,0,1,15, + 2049,11900,10,12202,12236,147,117,110,105,120,58,115,108,101,101,112,0,1,16,2049, + 11900,10,12222,12258,147,117,110,105,120,58,105,111,58,110,58,112,117,116,0,1, + 17,2049,11900,10,12241,12280,147,117,110,105,120,58,105,111,58,115,58,112,117,116, + 0,1,18,2049,11900,10,12263,12300,147,114,97,110,100,111,109,58,98,121,116,101, + 0,2049,3697,47,100,101,118,47,117,114,97,110,100,111,109,0,1,12302,1,0, + 2049,9321,1,9358,2049,2077,2049,9340,10,12263,12340,147,110,58,114,97,110,100,111,109, + 0,2049,12300,1,-8,24,2049,12300,17,1,-8,24,2049,12300,17,1,8,24,2049,12300, + 17,10,12328,12366,134,107,0,0,12361,12372,134,116,0,0,12367,12379,134,115,48,0, + 0,12373,12386,134,115,49,0,0,12380,12393,134,115,50,0,0,12387,12400,134,115,51, + 0,0,12394,12409,147,115,101,101,100,0,2,4097,12366,2,4097,12372,2,4097,12386,2, + 4097,12393,4097,12400,10,12401,12432,147,114,111,116,108,0,4097,12366,1793,12442,3841,12366,2049, + 2759,24,10,1,12436,1793,12453,1,32,3841,12366,18,24,10,1,12446,2049,2092,22,10, + 12424,12468,147,114,101,115,42,42,0,3841,12379,1,5,19,1,7,2049,12432,1,9, + 19,10,12328,12506,147,114,97,110,100,111,109,58,120,111,114,111,115,104,105,114, + 111,49,50,56,42,42,0,3841,12386,2,1,-9,24,5,3841,12400,3841,12379,3841,12393, + 386269701,1285,386269701,100926980,85394690,386269701,386270726,4097,12393,4097,12386,4097,12379,1,11,2049,12432,4097,12400,2049, + 12468,10,12481,12575,147,114,97,110,100,111,109,58,120,111,114,111,115,104,105,114, + 111,49,50,56,42,42,58,115,101,116,45,115,101,101,100,0,2049,12409,1,100, + 1793,12585,2049,12506,3,10,1,12581,2049,2252,10,12541,12600,134,83,116,97,116,101,115, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -661,19 +661,19 @@ int32_t ngaImage[] = { 1793,-1,13519,13527,201906,0,10,1,10,2,10,3,10,4,10,5,10, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,12587,13231,134,73,110,100,101,120,0,0,13222,13241,147,114,101,115,101, - 116,0,1,12597,67502597,2049,2918,17,2,15,1,30,24,4,15,23,1,1812433253,19,67502597, - 17,2049,2538,21,4,1,12597,17,16,10,13232,13283,147,114,97,110,100,111,109,105, - 122,101,100,0,1,1,1793,13297,2,2049,13241,2049,2905,2,1,624,14,10,1,13287, - 2049,2223,3,10,13269,13308,147,121,0,2,2049,2905,1,624,788,1,12597,17,15,2049, - 2538,21,4,1,12597,17,15,1,-31,24,17,10,13303,13342,147,97,108,116,101,114, - 101,100,0,2,2049,13308,2,1,1,21,1,1073741823,19,1793,13370,1,2,197652,67502597,1, - 397,17,1,624,788,1,12597,17,15,23,10,1,13354,2049,2065,23,4,1,12597,17, - 16,10,13331,13394,147,115,99,114,97,109,98,108,101,100,0,1,0,1793,13408,2, - 2049,13342,2049,2905,2,1,624,14,10,1,13398,2049,2223,3,10,12538,13442,147,114,97, - 110,100,111,109,58,109,101,114,115,101,110,110,101,58,115,101,116,45,115,101, - 101,100,0,4097,12597,1,0,4097,13231,2049,13283,10,13414,13470,147,114,97,110,100,111, - 109,58,109,101,114,115,101,110,110,101,0,3841,13231,2049,2564,1,13394,9,3841,13231, - 1,12597,17,15,2,1,11,24,23,2,1,-7,24,1,1073741823,21,23,2,1,-15, - 24,1,2011365376,21,23,2,1,18,24,23,3841,13231,2049,2905,1,624,788,4097,13231,10, - 13451,13526,147,98,121,101,0,10,0 }; + 0,0,0,0,0,0,12590,13234,134,73,110,100,101,120,0,0,13225,13244,147,114, + 101,115,101,116,0,1,12600,67502597,2049,2921,17,2,15,1,30,24,4,15,23,1, + 1812433253,19,67502597,17,2049,2541,21,4,1,12600,17,16,10,13235,13286,147,114,97,110,100, + 111,109,105,122,101,100,0,1,1,1793,13300,2,2049,13244,2049,2908,2,1,624,14, + 10,1,13290,2049,2223,3,10,13272,13311,147,121,0,2,2049,2908,1,624,788,1,12600, + 17,15,2049,2541,21,4,1,12600,17,15,1,-31,24,17,10,13306,13345,147,97,108, + 116,101,114,101,100,0,2,2049,13311,2,1,1,21,1,1073741823,19,1793,13373,1,2, + 197652,67502597,1,397,17,1,624,788,1,12600,17,15,23,10,1,13357,2049,2065,23,4, + 1,12600,17,16,10,13334,13397,147,115,99,114,97,109,98,108,101,100,0,1,0, + 1793,13411,2,2049,13345,2049,2908,2,1,624,14,10,1,13401,2049,2223,3,10,12541,13445, + 147,114,97,110,100,111,109,58,109,101,114,115,101,110,110,101,58,115,101,116, + 45,115,101,101,100,0,4097,12600,1,0,4097,13234,2049,13286,10,13417,13473,147,114,97, + 110,100,111,109,58,109,101,114,115,101,110,110,101,0,3841,13234,2049,2567,1,13397, + 9,3841,13234,1,12600,17,15,2,1,11,24,23,2,1,-7,24,1,1073741823,21,23, + 2,1,-15,24,1,2011365376,21,23,2,1,18,24,23,3841,13234,2049,2908,1,624,788, + 4097,13234,10,13454,13529,147,98,121,101,0,10,0 }; diff --git a/tools/retro-extend.forth b/tools/retro-extend.forth new file mode 100755 index 0000000..2d71ab7 --- /dev/null +++ b/tools/retro-extend.forth @@ -0,0 +1,249 @@ +#!/usr/bin/env retro + +There are two parts to building a Retro image. The first is the +assembly of the kernel using `retro-muri`. The second is to use +the kernel words and build up a complete image. I use this tool +(or an equivilent in C) for this. + +# Unu + +Since sources are written in a literate format I have a version +of the `retro-unu` tool included here. This will run a quote on +each line in the source that is a fenced region. + +~~~ +{{ + 'Fenced var + :toggle-fence @Fenced not !Fenced ; + :fenced? (-f) @Fenced ; + :handle-line (s-) + fenced? [ over call ] [ drop ] choose ; +---reveal--- + :unu (sq-) + swap [ dup '~~~ s:eq? + [ drop toggle-fence ] + [ handle-line ] choose + ] file:for-each-line drop ; +}} +~~~ + +# Nga in Retro + +Since this is written in Retro and builds a new image, I need +to keep the two instances separate. To do this, I implement a +version of the Nga virtual machine in Retro. This will execute +code in the new image. + +So first, allocate a memory region for the new image and +stacks. I also create variables to hold the instruction and +stack pointers. + +~~~ +#65535 #4 * 'IMAGE-SIZE const + +'Image d:create IMAGE-SIZE allot +'DataStack d:create #1024 allot +'ReturnStack d:create #4096 allot +'SP var +'RP var +'IP var +~~~ + +There are a few items in the kernel I need to access as this +progresses. I will fill in the value for `interpret` later. + +~~~ +#1025 &Image + 'TIB const +'interpret var +~~~ + +I next define helpers to move values to/from the host data +stack to the target ones. + +~~~ +:>s (n-) &DataStack @SP + store &SP v:inc ; +:s> (-n) &SP v:dec &DataStack @SP + fetch ; +:>r (n-) &ReturnStack @RP + store &RP v:inc ; +:r> (-n) &RP v:dec &ReturnStack @RP + fetch ; +~~~ + +One more helper here: a word to return the value that the +`IP` register points to in the target memory. + +~~~ +:[IP] @IP &Image + fetch ; +~~~ + +Ok, now for the instructions. See the Nga documentation +for these. Basically I just move things to/from the target +stacks, use the host words, then push the updated values +back. + +~~~ +:i:no ; +:i:li &IP v:inc [IP] >s ; +:i:du s> dup >s >s ; +:i:dr s> drop ; +:i:sw s> s> swap >s >s ; +:i:pu s> >r ; +:i:po r> >s ; +:i:ju s> n:dec !IP ; +:i:ca @IP >r i:ju ; +:i:cc s> s> [ >s i:ca ] [ drop ] choose ; +:i:re r> !IP ; +:i:eq s> s> eq? >s ; +:i:ne s> s> -eq? >s ; +:i:lt s> s> swap lt? >s ; +:i:gt s> s> swap gt? >s ; +:i:fe s> #-1 [ @SP >s ] case + #-2 [ @RP >s ] case + #-3 [ #65535 #4 * >s ] case + &Image + fetch >s ; +:i:st s> s> swap &Image + store ; +:i:ad s> s> + >s ; +:i:su s> s> swap - >s ; +:i:mu s> s> * >s ; +:i:di s> s> swap /mod >s >s ; +:i:an s> s> and >s ; +:i:or s> s> or >s ; +:i:xo s> s> xor >s ; +:i:sh s> s> swap shift >s ; +:i:zr s> dup n:zero? [ drop i:re ] [ >s ] choose ; +:i:en #0 !RP ; +:i:ie #1 >s ; +:i:iq #0 dup >s >s ; +:i:ii s> s> nip c:put ; +~~~ + +As with the C implementation, I use a jump table to map the +instructions to their handlers. + +~~~ +'Instructions d:create + &i:no , &i:li , &i:du , &i:dr , &i:sw , &i:pu , + &i:po , &i:ju , &i:ca , &i:cc , &i:re , &i:eq , + &i:ne , &i:lt , &i:gt , &i:fe , &i:st , &i:ad , + &i:su , &i:mu , &i:di , &i:an , &i:or , &i:xo , + &i:sh , &i:zr , &i:en , &i:ie , &i:iq , &i:ii , +~~~ + +Now to actually process the instructions. Instructions are +packed, so I need a word to unpack them. This is a simple +matter of shifting and masking. + +~~~ +{{ + :mask #255 and ; + :next #8 shift ; +---reveal--- + :unpack (n-dcba) + dup mask swap next + dup mask swap next + dup mask swap next + 'abcd 'dcba reorder ; +}} +~~~ + +Processing of a single opcode is next. This will do some +validation to make sure the opcode is in the expected range. + +~~~ +:process-single-opcode (n-) + dup #0 #29 n:between? + [ &Instructions + fetch call ] + [ 'Invalid_Instruction:_%n_! s:format s:put nl ] choose ; +~~~ + +And then a word to process a packed opcode. This also traps +the `err:notfound` to report on word-not-found conditions. + +Todo: the address of `err:notfound` shouldn't be hard coded +here. + +~~~ +:process-packed-opcode (n-) + @IP #339 eq? [ #1025 &Image + s:put sp $? c:put nl ] if + unpack + process-single-opcode + process-single-opcode + process-single-opcode + process-single-opcode ; +~~~ + +The final part of running code in the target is the +`execute` word. This will run through code until the +top level word called returns. + +~~~ +:execute (a-) + !IP #0 >r + [ [IP] process-packed-opcode &IP v:inc + @RP n:zero? ] until ; +~~~ + +# Load the Kernel + +~~~ +'FID var + +:read-byte (n-) @FID file:read #255 and ; + +:read-cell (-n) + read-byte + read-byte + read-byte + read-byte + #-8 shift + + #-8 shift + + #-8 shift + ; + +:load-image (s-) + file:R file:open !FID + &Image @FID file:size #4 / [ read-cell over store n:inc ] times drop + @FID dup file:size #4 / n:put '_cells s:put nl file:close ; + +'ngaImage load-image +~~~ + +# Map in Functions + +~~~ +'Find_`interpret`... s:put +:image:Dictionary &Image #2 + ; +image:Dictionary fetch + [ repeat fetch 0; dup d:name 'interpret s:eq? + [ dup d:xt fetch !interpret ] if again ] call +'_@_ s:put @interpret n:put nl +~~~ + +# Process the Extensions + +~~~ +#0 sys:argv + [ &Heap + [ ASCII:SPACE s:tokenize + [ dup s:length n:zero? &drop [ TIB s:copy #1025 >s @interpret execute ] choose $. c:put ] set:for-each + ] v:preserve ] unu nl +~~~ + +# Save the Image + +~~~ +'FID var + +:write-byte (n-) @FID file:write ; +:mask (n-) #255 and ; + +:write-cell (n-) + dup mask write-byte + #8 shift dup mask write-byte + #8 shift dup mask write-byte + #8 shift mask write-byte ; + +:save-image (s-) + file:W file:open !FID + &Image &Image #3 + fetch [ fetch-next write-cell ] times drop + @FID file:close ; + +'ngaImage2 save-image +~~~