1 /* Generated by Snowball 2.1.0 - https://snowballstem.org/ */
2 
3 #include "header.h"
4 
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8 extern int arabic_UTF_8_stem(struct SN_env * z);
9 #ifdef __cplusplus
10 }
11 #endif
12 static int r_Checks1(struct SN_env * z);
13 static int r_Normalize_pre(struct SN_env * z);
14 static int r_Normalize_post(struct SN_env * z);
15 static int r_Suffix_Verb_Step2c(struct SN_env * z);
16 static int r_Suffix_Verb_Step2b(struct SN_env * z);
17 static int r_Suffix_Verb_Step2a(struct SN_env * z);
18 static int r_Suffix_Verb_Step1(struct SN_env * z);
19 static int r_Suffix_Noun_Step3(struct SN_env * z);
20 static int r_Suffix_Noun_Step2c2(struct SN_env * z);
21 static int r_Suffix_Noun_Step2c1(struct SN_env * z);
22 static int r_Suffix_Noun_Step2b(struct SN_env * z);
23 static int r_Suffix_Noun_Step2a(struct SN_env * z);
24 static int r_Suffix_Noun_Step1b(struct SN_env * z);
25 static int r_Suffix_Noun_Step1a(struct SN_env * z);
26 static int r_Suffix_All_alef_maqsura(struct SN_env * z);
27 static int r_Prefix_Step4_Verb(struct SN_env * z);
28 static int r_Prefix_Step3_Verb(struct SN_env * z);
29 static int r_Prefix_Step3b_Noun(struct SN_env * z);
30 static int r_Prefix_Step3a_Noun(struct SN_env * z);
31 static int r_Prefix_Step2(struct SN_env * z);
32 static int r_Prefix_Step1(struct SN_env * z);
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 
37 
38 extern struct SN_env * arabic_UTF_8_create_env(void);
39 extern void arabic_UTF_8_close_env(struct SN_env * z);
40 
41 
42 #ifdef __cplusplus
43 }
44 #endif
45 static const symbol s_0_0[2] = { 0xD9, 0x80 };
46 static const symbol s_0_1[2] = { 0xD9, 0x8B };
47 static const symbol s_0_2[2] = { 0xD9, 0x8C };
48 static const symbol s_0_3[2] = { 0xD9, 0x8D };
49 static const symbol s_0_4[2] = { 0xD9, 0x8E };
50 static const symbol s_0_5[2] = { 0xD9, 0x8F };
51 static const symbol s_0_6[2] = { 0xD9, 0x90 };
52 static const symbol s_0_7[2] = { 0xD9, 0x91 };
53 static const symbol s_0_8[2] = { 0xD9, 0x92 };
54 static const symbol s_0_9[2] = { 0xD9, 0xA0 };
55 static const symbol s_0_10[2] = { 0xD9, 0xA1 };
56 static const symbol s_0_11[2] = { 0xD9, 0xA2 };
57 static const symbol s_0_12[2] = { 0xD9, 0xA3 };
58 static const symbol s_0_13[2] = { 0xD9, 0xA4 };
59 static const symbol s_0_14[2] = { 0xD9, 0xA5 };
60 static const symbol s_0_15[2] = { 0xD9, 0xA6 };
61 static const symbol s_0_16[2] = { 0xD9, 0xA7 };
62 static const symbol s_0_17[2] = { 0xD9, 0xA8 };
63 static const symbol s_0_18[2] = { 0xD9, 0xA9 };
64 static const symbol s_0_19[3] = { 0xEF, 0xBA, 0x80 };
65 static const symbol s_0_20[3] = { 0xEF, 0xBA, 0x81 };
66 static const symbol s_0_21[3] = { 0xEF, 0xBA, 0x82 };
67 static const symbol s_0_22[3] = { 0xEF, 0xBA, 0x83 };
68 static const symbol s_0_23[3] = { 0xEF, 0xBA, 0x84 };
69 static const symbol s_0_24[3] = { 0xEF, 0xBA, 0x85 };
70 static const symbol s_0_25[3] = { 0xEF, 0xBA, 0x86 };
71 static const symbol s_0_26[3] = { 0xEF, 0xBA, 0x87 };
72 static const symbol s_0_27[3] = { 0xEF, 0xBA, 0x88 };
73 static const symbol s_0_28[3] = { 0xEF, 0xBA, 0x89 };
74 static const symbol s_0_29[3] = { 0xEF, 0xBA, 0x8A };
75 static const symbol s_0_30[3] = { 0xEF, 0xBA, 0x8B };
76 static const symbol s_0_31[3] = { 0xEF, 0xBA, 0x8C };
77 static const symbol s_0_32[3] = { 0xEF, 0xBA, 0x8D };
78 static const symbol s_0_33[3] = { 0xEF, 0xBA, 0x8E };
79 static const symbol s_0_34[3] = { 0xEF, 0xBA, 0x8F };
80 static const symbol s_0_35[3] = { 0xEF, 0xBA, 0x90 };
81 static const symbol s_0_36[3] = { 0xEF, 0xBA, 0x91 };
82 static const symbol s_0_37[3] = { 0xEF, 0xBA, 0x92 };
83 static const symbol s_0_38[3] = { 0xEF, 0xBA, 0x93 };
84 static const symbol s_0_39[3] = { 0xEF, 0xBA, 0x94 };
85 static const symbol s_0_40[3] = { 0xEF, 0xBA, 0x95 };
86 static const symbol s_0_41[3] = { 0xEF, 0xBA, 0x96 };
87 static const symbol s_0_42[3] = { 0xEF, 0xBA, 0x97 };
88 static const symbol s_0_43[3] = { 0xEF, 0xBA, 0x98 };
89 static const symbol s_0_44[3] = { 0xEF, 0xBA, 0x99 };
90 static const symbol s_0_45[3] = { 0xEF, 0xBA, 0x9A };
91 static const symbol s_0_46[3] = { 0xEF, 0xBA, 0x9B };
92 static const symbol s_0_47[3] = { 0xEF, 0xBA, 0x9C };
93 static const symbol s_0_48[3] = { 0xEF, 0xBA, 0x9D };
94 static const symbol s_0_49[3] = { 0xEF, 0xBA, 0x9E };
95 static const symbol s_0_50[3] = { 0xEF, 0xBA, 0x9F };
96 static const symbol s_0_51[3] = { 0xEF, 0xBA, 0xA0 };
97 static const symbol s_0_52[3] = { 0xEF, 0xBA, 0xA1 };
98 static const symbol s_0_53[3] = { 0xEF, 0xBA, 0xA2 };
99 static const symbol s_0_54[3] = { 0xEF, 0xBA, 0xA3 };
100 static const symbol s_0_55[3] = { 0xEF, 0xBA, 0xA4 };
101 static const symbol s_0_56[3] = { 0xEF, 0xBA, 0xA5 };
102 static const symbol s_0_57[3] = { 0xEF, 0xBA, 0xA6 };
103 static const symbol s_0_58[3] = { 0xEF, 0xBA, 0xA7 };
104 static const symbol s_0_59[3] = { 0xEF, 0xBA, 0xA8 };
105 static const symbol s_0_60[3] = { 0xEF, 0xBA, 0xA9 };
106 static const symbol s_0_61[3] = { 0xEF, 0xBA, 0xAA };
107 static const symbol s_0_62[3] = { 0xEF, 0xBA, 0xAB };
108 static const symbol s_0_63[3] = { 0xEF, 0xBA, 0xAC };
109 static const symbol s_0_64[3] = { 0xEF, 0xBA, 0xAD };
110 static const symbol s_0_65[3] = { 0xEF, 0xBA, 0xAE };
111 static const symbol s_0_66[3] = { 0xEF, 0xBA, 0xAF };
112 static const symbol s_0_67[3] = { 0xEF, 0xBA, 0xB0 };
113 static const symbol s_0_68[3] = { 0xEF, 0xBA, 0xB1 };
114 static const symbol s_0_69[3] = { 0xEF, 0xBA, 0xB2 };
115 static const symbol s_0_70[3] = { 0xEF, 0xBA, 0xB3 };
116 static const symbol s_0_71[3] = { 0xEF, 0xBA, 0xB4 };
117 static const symbol s_0_72[3] = { 0xEF, 0xBA, 0xB5 };
118 static const symbol s_0_73[3] = { 0xEF, 0xBA, 0xB6 };
119 static const symbol s_0_74[3] = { 0xEF, 0xBA, 0xB7 };
120 static const symbol s_0_75[3] = { 0xEF, 0xBA, 0xB8 };
121 static const symbol s_0_76[3] = { 0xEF, 0xBA, 0xB9 };
122 static const symbol s_0_77[3] = { 0xEF, 0xBA, 0xBA };
123 static const symbol s_0_78[3] = { 0xEF, 0xBA, 0xBB };
124 static const symbol s_0_79[3] = { 0xEF, 0xBA, 0xBC };
125 static const symbol s_0_80[3] = { 0xEF, 0xBA, 0xBD };
126 static const symbol s_0_81[3] = { 0xEF, 0xBA, 0xBE };
127 static const symbol s_0_82[3] = { 0xEF, 0xBA, 0xBF };
128 static const symbol s_0_83[3] = { 0xEF, 0xBB, 0x80 };
129 static const symbol s_0_84[3] = { 0xEF, 0xBB, 0x81 };
130 static const symbol s_0_85[3] = { 0xEF, 0xBB, 0x82 };
131 static const symbol s_0_86[3] = { 0xEF, 0xBB, 0x83 };
132 static const symbol s_0_87[3] = { 0xEF, 0xBB, 0x84 };
133 static const symbol s_0_88[3] = { 0xEF, 0xBB, 0x85 };
134 static const symbol s_0_89[3] = { 0xEF, 0xBB, 0x86 };
135 static const symbol s_0_90[3] = { 0xEF, 0xBB, 0x87 };
136 static const symbol s_0_91[3] = { 0xEF, 0xBB, 0x88 };
137 static const symbol s_0_92[3] = { 0xEF, 0xBB, 0x89 };
138 static const symbol s_0_93[3] = { 0xEF, 0xBB, 0x8A };
139 static const symbol s_0_94[3] = { 0xEF, 0xBB, 0x8B };
140 static const symbol s_0_95[3] = { 0xEF, 0xBB, 0x8C };
141 static const symbol s_0_96[3] = { 0xEF, 0xBB, 0x8D };
142 static const symbol s_0_97[3] = { 0xEF, 0xBB, 0x8E };
143 static const symbol s_0_98[3] = { 0xEF, 0xBB, 0x8F };
144 static const symbol s_0_99[3] = { 0xEF, 0xBB, 0x90 };
145 static const symbol s_0_100[3] = { 0xEF, 0xBB, 0x91 };
146 static const symbol s_0_101[3] = { 0xEF, 0xBB, 0x92 };
147 static const symbol s_0_102[3] = { 0xEF, 0xBB, 0x93 };
148 static const symbol s_0_103[3] = { 0xEF, 0xBB, 0x94 };
149 static const symbol s_0_104[3] = { 0xEF, 0xBB, 0x95 };
150 static const symbol s_0_105[3] = { 0xEF, 0xBB, 0x96 };
151 static const symbol s_0_106[3] = { 0xEF, 0xBB, 0x97 };
152 static const symbol s_0_107[3] = { 0xEF, 0xBB, 0x98 };
153 static const symbol s_0_108[3] = { 0xEF, 0xBB, 0x99 };
154 static const symbol s_0_109[3] = { 0xEF, 0xBB, 0x9A };
155 static const symbol s_0_110[3] = { 0xEF, 0xBB, 0x9B };
156 static const symbol s_0_111[3] = { 0xEF, 0xBB, 0x9C };
157 static const symbol s_0_112[3] = { 0xEF, 0xBB, 0x9D };
158 static const symbol s_0_113[3] = { 0xEF, 0xBB, 0x9E };
159 static const symbol s_0_114[3] = { 0xEF, 0xBB, 0x9F };
160 static const symbol s_0_115[3] = { 0xEF, 0xBB, 0xA0 };
161 static const symbol s_0_116[3] = { 0xEF, 0xBB, 0xA1 };
162 static const symbol s_0_117[3] = { 0xEF, 0xBB, 0xA2 };
163 static const symbol s_0_118[3] = { 0xEF, 0xBB, 0xA3 };
164 static const symbol s_0_119[3] = { 0xEF, 0xBB, 0xA4 };
165 static const symbol s_0_120[3] = { 0xEF, 0xBB, 0xA5 };
166 static const symbol s_0_121[3] = { 0xEF, 0xBB, 0xA6 };
167 static const symbol s_0_122[3] = { 0xEF, 0xBB, 0xA7 };
168 static const symbol s_0_123[3] = { 0xEF, 0xBB, 0xA8 };
169 static const symbol s_0_124[3] = { 0xEF, 0xBB, 0xA9 };
170 static const symbol s_0_125[3] = { 0xEF, 0xBB, 0xAA };
171 static const symbol s_0_126[3] = { 0xEF, 0xBB, 0xAB };
172 static const symbol s_0_127[3] = { 0xEF, 0xBB, 0xAC };
173 static const symbol s_0_128[3] = { 0xEF, 0xBB, 0xAD };
174 static const symbol s_0_129[3] = { 0xEF, 0xBB, 0xAE };
175 static const symbol s_0_130[3] = { 0xEF, 0xBB, 0xAF };
176 static const symbol s_0_131[3] = { 0xEF, 0xBB, 0xB0 };
177 static const symbol s_0_132[3] = { 0xEF, 0xBB, 0xB1 };
178 static const symbol s_0_133[3] = { 0xEF, 0xBB, 0xB2 };
179 static const symbol s_0_134[3] = { 0xEF, 0xBB, 0xB3 };
180 static const symbol s_0_135[3] = { 0xEF, 0xBB, 0xB4 };
181 static const symbol s_0_136[3] = { 0xEF, 0xBB, 0xB5 };
182 static const symbol s_0_137[3] = { 0xEF, 0xBB, 0xB6 };
183 static const symbol s_0_138[3] = { 0xEF, 0xBB, 0xB7 };
184 static const symbol s_0_139[3] = { 0xEF, 0xBB, 0xB8 };
185 static const symbol s_0_140[3] = { 0xEF, 0xBB, 0xB9 };
186 static const symbol s_0_141[3] = { 0xEF, 0xBB, 0xBA };
187 static const symbol s_0_142[3] = { 0xEF, 0xBB, 0xBB };
188 static const symbol s_0_143[3] = { 0xEF, 0xBB, 0xBC };
189 
190 static const struct among a_0[144] =
191 {
192 { 2, s_0_0, -1, 1, 0},
193 { 2, s_0_1, -1, 1, 0},
194 { 2, s_0_2, -1, 1, 0},
195 { 2, s_0_3, -1, 1, 0},
196 { 2, s_0_4, -1, 1, 0},
197 { 2, s_0_5, -1, 1, 0},
198 { 2, s_0_6, -1, 1, 0},
199 { 2, s_0_7, -1, 1, 0},
200 { 2, s_0_8, -1, 1, 0},
201 { 2, s_0_9, -1, 2, 0},
202 { 2, s_0_10, -1, 3, 0},
203 { 2, s_0_11, -1, 4, 0},
204 { 2, s_0_12, -1, 5, 0},
205 { 2, s_0_13, -1, 6, 0},
206 { 2, s_0_14, -1, 7, 0},
207 { 2, s_0_15, -1, 8, 0},
208 { 2, s_0_16, -1, 9, 0},
209 { 2, s_0_17, -1, 10, 0},
210 { 2, s_0_18, -1, 11, 0},
211 { 3, s_0_19, -1, 12, 0},
212 { 3, s_0_20, -1, 16, 0},
213 { 3, s_0_21, -1, 16, 0},
214 { 3, s_0_22, -1, 13, 0},
215 { 3, s_0_23, -1, 13, 0},
216 { 3, s_0_24, -1, 17, 0},
217 { 3, s_0_25, -1, 17, 0},
218 { 3, s_0_26, -1, 14, 0},
219 { 3, s_0_27, -1, 14, 0},
220 { 3, s_0_28, -1, 15, 0},
221 { 3, s_0_29, -1, 15, 0},
222 { 3, s_0_30, -1, 15, 0},
223 { 3, s_0_31, -1, 15, 0},
224 { 3, s_0_32, -1, 18, 0},
225 { 3, s_0_33, -1, 18, 0},
226 { 3, s_0_34, -1, 19, 0},
227 { 3, s_0_35, -1, 19, 0},
228 { 3, s_0_36, -1, 19, 0},
229 { 3, s_0_37, -1, 19, 0},
230 { 3, s_0_38, -1, 20, 0},
231 { 3, s_0_39, -1, 20, 0},
232 { 3, s_0_40, -1, 21, 0},
233 { 3, s_0_41, -1, 21, 0},
234 { 3, s_0_42, -1, 21, 0},
235 { 3, s_0_43, -1, 21, 0},
236 { 3, s_0_44, -1, 22, 0},
237 { 3, s_0_45, -1, 22, 0},
238 { 3, s_0_46, -1, 22, 0},
239 { 3, s_0_47, -1, 22, 0},
240 { 3, s_0_48, -1, 23, 0},
241 { 3, s_0_49, -1, 23, 0},
242 { 3, s_0_50, -1, 23, 0},
243 { 3, s_0_51, -1, 23, 0},
244 { 3, s_0_52, -1, 24, 0},
245 { 3, s_0_53, -1, 24, 0},
246 { 3, s_0_54, -1, 24, 0},
247 { 3, s_0_55, -1, 24, 0},
248 { 3, s_0_56, -1, 25, 0},
249 { 3, s_0_57, -1, 25, 0},
250 { 3, s_0_58, -1, 25, 0},
251 { 3, s_0_59, -1, 25, 0},
252 { 3, s_0_60, -1, 26, 0},
253 { 3, s_0_61, -1, 26, 0},
254 { 3, s_0_62, -1, 27, 0},
255 { 3, s_0_63, -1, 27, 0},
256 { 3, s_0_64, -1, 28, 0},
257 { 3, s_0_65, -1, 28, 0},
258 { 3, s_0_66, -1, 29, 0},
259 { 3, s_0_67, -1, 29, 0},
260 { 3, s_0_68, -1, 30, 0},
261 { 3, s_0_69, -1, 30, 0},
262 { 3, s_0_70, -1, 30, 0},
263 { 3, s_0_71, -1, 30, 0},
264 { 3, s_0_72, -1, 31, 0},
265 { 3, s_0_73, -1, 31, 0},
266 { 3, s_0_74, -1, 31, 0},
267 { 3, s_0_75, -1, 31, 0},
268 { 3, s_0_76, -1, 32, 0},
269 { 3, s_0_77, -1, 32, 0},
270 { 3, s_0_78, -1, 32, 0},
271 { 3, s_0_79, -1, 32, 0},
272 { 3, s_0_80, -1, 33, 0},
273 { 3, s_0_81, -1, 33, 0},
274 { 3, s_0_82, -1, 33, 0},
275 { 3, s_0_83, -1, 33, 0},
276 { 3, s_0_84, -1, 34, 0},
277 { 3, s_0_85, -1, 34, 0},
278 { 3, s_0_86, -1, 34, 0},
279 { 3, s_0_87, -1, 34, 0},
280 { 3, s_0_88, -1, 35, 0},
281 { 3, s_0_89, -1, 35, 0},
282 { 3, s_0_90, -1, 35, 0},
283 { 3, s_0_91, -1, 35, 0},
284 { 3, s_0_92, -1, 36, 0},
285 { 3, s_0_93, -1, 36, 0},
286 { 3, s_0_94, -1, 36, 0},
287 { 3, s_0_95, -1, 36, 0},
288 { 3, s_0_96, -1, 37, 0},
289 { 3, s_0_97, -1, 37, 0},
290 { 3, s_0_98, -1, 37, 0},
291 { 3, s_0_99, -1, 37, 0},
292 { 3, s_0_100, -1, 38, 0},
293 { 3, s_0_101, -1, 38, 0},
294 { 3, s_0_102, -1, 38, 0},
295 { 3, s_0_103, -1, 38, 0},
296 { 3, s_0_104, -1, 39, 0},
297 { 3, s_0_105, -1, 39, 0},
298 { 3, s_0_106, -1, 39, 0},
299 { 3, s_0_107, -1, 39, 0},
300 { 3, s_0_108, -1, 40, 0},
301 { 3, s_0_109, -1, 40, 0},
302 { 3, s_0_110, -1, 40, 0},
303 { 3, s_0_111, -1, 40, 0},
304 { 3, s_0_112, -1, 41, 0},
305 { 3, s_0_113, -1, 41, 0},
306 { 3, s_0_114, -1, 41, 0},
307 { 3, s_0_115, -1, 41, 0},
308 { 3, s_0_116, -1, 42, 0},
309 { 3, s_0_117, -1, 42, 0},
310 { 3, s_0_118, -1, 42, 0},
311 { 3, s_0_119, -1, 42, 0},
312 { 3, s_0_120, -1, 43, 0},
313 { 3, s_0_121, -1, 43, 0},
314 { 3, s_0_122, -1, 43, 0},
315 { 3, s_0_123, -1, 43, 0},
316 { 3, s_0_124, -1, 44, 0},
317 { 3, s_0_125, -1, 44, 0},
318 { 3, s_0_126, -1, 44, 0},
319 { 3, s_0_127, -1, 44, 0},
320 { 3, s_0_128, -1, 45, 0},
321 { 3, s_0_129, -1, 45, 0},
322 { 3, s_0_130, -1, 46, 0},
323 { 3, s_0_131, -1, 46, 0},
324 { 3, s_0_132, -1, 47, 0},
325 { 3, s_0_133, -1, 47, 0},
326 { 3, s_0_134, -1, 47, 0},
327 { 3, s_0_135, -1, 47, 0},
328 { 3, s_0_136, -1, 51, 0},
329 { 3, s_0_137, -1, 51, 0},
330 { 3, s_0_138, -1, 49, 0},
331 { 3, s_0_139, -1, 49, 0},
332 { 3, s_0_140, -1, 50, 0},
333 { 3, s_0_141, -1, 50, 0},
334 { 3, s_0_142, -1, 48, 0},
335 { 3, s_0_143, -1, 48, 0}
336 };
337 
338 static const symbol s_1_0[2] = { 0xD8, 0xA2 };
339 static const symbol s_1_1[2] = { 0xD8, 0xA3 };
340 static const symbol s_1_2[2] = { 0xD8, 0xA4 };
341 static const symbol s_1_3[2] = { 0xD8, 0xA5 };
342 static const symbol s_1_4[2] = { 0xD8, 0xA6 };
343 
344 static const struct among a_1[5] =
345 {
346 { 2, s_1_0, -1, 1, 0},
347 { 2, s_1_1, -1, 1, 0},
348 { 2, s_1_2, -1, 1, 0},
349 { 2, s_1_3, -1, 1, 0},
350 { 2, s_1_4, -1, 1, 0}
351 };
352 
353 static const symbol s_2_0[2] = { 0xD8, 0xA2 };
354 static const symbol s_2_1[2] = { 0xD8, 0xA3 };
355 static const symbol s_2_2[2] = { 0xD8, 0xA4 };
356 static const symbol s_2_3[2] = { 0xD8, 0xA5 };
357 static const symbol s_2_4[2] = { 0xD8, 0xA6 };
358 
359 static const struct among a_2[5] =
360 {
361 { 2, s_2_0, -1, 1, 0},
362 { 2, s_2_1, -1, 1, 0},
363 { 2, s_2_2, -1, 2, 0},
364 { 2, s_2_3, -1, 1, 0},
365 { 2, s_2_4, -1, 3, 0}
366 };
367 
368 static const symbol s_3_0[4] = { 0xD8, 0xA7, 0xD9, 0x84 };
369 static const symbol s_3_1[6] = { 0xD8, 0xA8, 0xD8, 0xA7, 0xD9, 0x84 };
370 static const symbol s_3_2[6] = { 0xD9, 0x83, 0xD8, 0xA7, 0xD9, 0x84 };
371 static const symbol s_3_3[4] = { 0xD9, 0x84, 0xD9, 0x84 };
372 
373 static const struct among a_3[4] =
374 {
375 { 4, s_3_0, -1, 2, 0},
376 { 6, s_3_1, -1, 1, 0},
377 { 6, s_3_2, -1, 1, 0},
378 { 4, s_3_3, -1, 2, 0}
379 };
380 
381 static const symbol s_4_0[4] = { 0xD8, 0xA3, 0xD8, 0xA2 };
382 static const symbol s_4_1[4] = { 0xD8, 0xA3, 0xD8, 0xA3 };
383 static const symbol s_4_2[4] = { 0xD8, 0xA3, 0xD8, 0xA4 };
384 static const symbol s_4_3[4] = { 0xD8, 0xA3, 0xD8, 0xA5 };
385 static const symbol s_4_4[4] = { 0xD8, 0xA3, 0xD8, 0xA7 };
386 
387 static const struct among a_4[5] =
388 {
389 { 4, s_4_0, -1, 2, 0},
390 { 4, s_4_1, -1, 1, 0},
391 { 4, s_4_2, -1, 1, 0},
392 { 4, s_4_3, -1, 4, 0},
393 { 4, s_4_4, -1, 3, 0}
394 };
395 
396 static const symbol s_5_0[2] = { 0xD9, 0x81 };
397 static const symbol s_5_1[2] = { 0xD9, 0x88 };
398 
399 static const struct among a_5[2] =
400 {
401 { 2, s_5_0, -1, 1, 0},
402 { 2, s_5_1, -1, 1, 0}
403 };
404 
405 static const symbol s_6_0[4] = { 0xD8, 0xA7, 0xD9, 0x84 };
406 static const symbol s_6_1[6] = { 0xD8, 0xA8, 0xD8, 0xA7, 0xD9, 0x84 };
407 static const symbol s_6_2[6] = { 0xD9, 0x83, 0xD8, 0xA7, 0xD9, 0x84 };
408 static const symbol s_6_3[4] = { 0xD9, 0x84, 0xD9, 0x84 };
409 
410 static const struct among a_6[4] =
411 {
412 { 4, s_6_0, -1, 2, 0},
413 { 6, s_6_1, -1, 1, 0},
414 { 6, s_6_2, -1, 1, 0},
415 { 4, s_6_3, -1, 2, 0}
416 };
417 
418 static const symbol s_7_0[2] = { 0xD8, 0xA8 };
419 static const symbol s_7_1[4] = { 0xD8, 0xA8, 0xD8, 0xA8 };
420 static const symbol s_7_2[4] = { 0xD9, 0x83, 0xD9, 0x83 };
421 
422 static const struct among a_7[3] =
423 {
424 { 2, s_7_0, -1, 1, 0},
425 { 4, s_7_1, 0, 2, 0},
426 { 4, s_7_2, -1, 3, 0}
427 };
428 
429 static const symbol s_8_0[4] = { 0xD8, 0xB3, 0xD8, 0xA3 };
430 static const symbol s_8_1[4] = { 0xD8, 0xB3, 0xD8, 0xAA };
431 static const symbol s_8_2[4] = { 0xD8, 0xB3, 0xD9, 0x86 };
432 static const symbol s_8_3[4] = { 0xD8, 0xB3, 0xD9, 0x8A };
433 
434 static const struct among a_8[4] =
435 {
436 { 4, s_8_0, -1, 4, 0},
437 { 4, s_8_1, -1, 2, 0},
438 { 4, s_8_2, -1, 3, 0},
439 { 4, s_8_3, -1, 1, 0}
440 };
441 
442 static const symbol s_9_0[6] = { 0xD8, 0xAA, 0xD8, 0xB3, 0xD8, 0xAA };
443 static const symbol s_9_1[6] = { 0xD9, 0x86, 0xD8, 0xB3, 0xD8, 0xAA };
444 static const symbol s_9_2[6] = { 0xD9, 0x8A, 0xD8, 0xB3, 0xD8, 0xAA };
445 
446 static const struct among a_9[3] =
447 {
448 { 6, s_9_0, -1, 1, 0},
449 { 6, s_9_1, -1, 1, 0},
450 { 6, s_9_2, -1, 1, 0}
451 };
452 
453 static const symbol s_10_0[2] = { 0xD9, 0x83 };
454 static const symbol s_10_1[4] = { 0xD9, 0x83, 0xD9, 0x85 };
455 static const symbol s_10_2[4] = { 0xD9, 0x87, 0xD9, 0x85 };
456 static const symbol s_10_3[4] = { 0xD9, 0x87, 0xD9, 0x86 };
457 static const symbol s_10_4[2] = { 0xD9, 0x87 };
458 static const symbol s_10_5[2] = { 0xD9, 0x8A };
459 static const symbol s_10_6[6] = { 0xD9, 0x83, 0xD9, 0x85, 0xD8, 0xA7 };
460 static const symbol s_10_7[6] = { 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xA7 };
461 static const symbol s_10_8[4] = { 0xD9, 0x86, 0xD8, 0xA7 };
462 static const symbol s_10_9[4] = { 0xD9, 0x87, 0xD8, 0xA7 };
463 
464 static const struct among a_10[10] =
465 {
466 { 2, s_10_0, -1, 1, 0},
467 { 4, s_10_1, -1, 2, 0},
468 { 4, s_10_2, -1, 2, 0},
469 { 4, s_10_3, -1, 2, 0},
470 { 2, s_10_4, -1, 1, 0},
471 { 2, s_10_5, -1, 1, 0},
472 { 6, s_10_6, -1, 3, 0},
473 { 6, s_10_7, -1, 3, 0},
474 { 4, s_10_8, -1, 2, 0},
475 { 4, s_10_9, -1, 2, 0}
476 };
477 
478 static const symbol s_11_0[2] = { 0xD9, 0x86 };
479 
480 static const struct among a_11[1] =
481 {
482 { 2, s_11_0, -1, 1, 0}
483 };
484 
485 static const symbol s_12_0[2] = { 0xD9, 0x88 };
486 static const symbol s_12_1[2] = { 0xD9, 0x8A };
487 static const symbol s_12_2[2] = { 0xD8, 0xA7 };
488 
489 static const struct among a_12[3] =
490 {
491 { 2, s_12_0, -1, 1, 0},
492 { 2, s_12_1, -1, 1, 0},
493 { 2, s_12_2, -1, 1, 0}
494 };
495 
496 static const symbol s_13_0[4] = { 0xD8, 0xA7, 0xD8, 0xAA };
497 
498 static const struct among a_13[1] =
499 {
500 { 4, s_13_0, -1, 1, 0}
501 };
502 
503 static const symbol s_14_0[2] = { 0xD8, 0xAA };
504 
505 static const struct among a_14[1] =
506 {
507 { 2, s_14_0, -1, 1, 0}
508 };
509 
510 static const symbol s_15_0[2] = { 0xD8, 0xA9 };
511 
512 static const struct among a_15[1] =
513 {
514 { 2, s_15_0, -1, 1, 0}
515 };
516 
517 static const symbol s_16_0[2] = { 0xD9, 0x8A };
518 
519 static const struct among a_16[1] =
520 {
521 { 2, s_16_0, -1, 1, 0}
522 };
523 
524 static const symbol s_17_0[2] = { 0xD9, 0x83 };
525 static const symbol s_17_1[4] = { 0xD9, 0x83, 0xD9, 0x85 };
526 static const symbol s_17_2[4] = { 0xD9, 0x87, 0xD9, 0x85 };
527 static const symbol s_17_3[4] = { 0xD9, 0x83, 0xD9, 0x86 };
528 static const symbol s_17_4[4] = { 0xD9, 0x87, 0xD9, 0x86 };
529 static const symbol s_17_5[2] = { 0xD9, 0x87 };
530 static const symbol s_17_6[6] = { 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x88 };
531 static const symbol s_17_7[4] = { 0xD9, 0x86, 0xD9, 0x8A };
532 static const symbol s_17_8[6] = { 0xD9, 0x83, 0xD9, 0x85, 0xD8, 0xA7 };
533 static const symbol s_17_9[6] = { 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xA7 };
534 static const symbol s_17_10[4] = { 0xD9, 0x86, 0xD8, 0xA7 };
535 static const symbol s_17_11[4] = { 0xD9, 0x87, 0xD8, 0xA7 };
536 
537 static const struct among a_17[12] =
538 {
539 { 2, s_17_0, -1, 1, 0},
540 { 4, s_17_1, -1, 2, 0},
541 { 4, s_17_2, -1, 2, 0},
542 { 4, s_17_3, -1, 2, 0},
543 { 4, s_17_4, -1, 2, 0},
544 { 2, s_17_5, -1, 1, 0},
545 { 6, s_17_6, -1, 3, 0},
546 { 4, s_17_7, -1, 2, 0},
547 { 6, s_17_8, -1, 3, 0},
548 { 6, s_17_9, -1, 3, 0},
549 { 4, s_17_10, -1, 2, 0},
550 { 4, s_17_11, -1, 2, 0}
551 };
552 
553 static const symbol s_18_0[2] = { 0xD9, 0x86 };
554 static const symbol s_18_1[4] = { 0xD9, 0x88, 0xD9, 0x86 };
555 static const symbol s_18_2[4] = { 0xD9, 0x8A, 0xD9, 0x86 };
556 static const symbol s_18_3[4] = { 0xD8, 0xA7, 0xD9, 0x86 };
557 static const symbol s_18_4[4] = { 0xD8, 0xAA, 0xD9, 0x86 };
558 static const symbol s_18_5[2] = { 0xD9, 0x8A };
559 static const symbol s_18_6[2] = { 0xD8, 0xA7 };
560 static const symbol s_18_7[6] = { 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xA7 };
561 static const symbol s_18_8[4] = { 0xD9, 0x86, 0xD8, 0xA7 };
562 static const symbol s_18_9[4] = { 0xD8, 0xAA, 0xD8, 0xA7 };
563 static const symbol s_18_10[2] = { 0xD8, 0xAA };
564 
565 static const struct among a_18[11] =
566 {
567 { 2, s_18_0, -1, 1, 0},
568 { 4, s_18_1, 0, 3, 0},
569 { 4, s_18_2, 0, 3, 0},
570 { 4, s_18_3, 0, 3, 0},
571 { 4, s_18_4, 0, 2, 0},
572 { 2, s_18_5, -1, 1, 0},
573 { 2, s_18_6, -1, 1, 0},
574 { 6, s_18_7, 6, 4, 0},
575 { 4, s_18_8, 6, 2, 0},
576 { 4, s_18_9, 6, 2, 0},
577 { 2, s_18_10, -1, 1, 0}
578 };
579 
580 static const symbol s_19_0[4] = { 0xD8, 0xAA, 0xD9, 0x85 };
581 static const symbol s_19_1[4] = { 0xD9, 0x88, 0xD8, 0xA7 };
582 
583 static const struct among a_19[2] =
584 {
585 { 4, s_19_0, -1, 1, 0},
586 { 4, s_19_1, -1, 1, 0}
587 };
588 
589 static const symbol s_20_0[2] = { 0xD9, 0x88 };
590 static const symbol s_20_1[6] = { 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x88 };
591 
592 static const struct among a_20[2] =
593 {
594 { 2, s_20_0, -1, 1, 0},
595 { 6, s_20_1, 0, 2, 0}
596 };
597 
598 static const symbol s_21_0[2] = { 0xD9, 0x89 };
599 
600 static const struct among a_21[1] =
601 {
602 { 2, s_21_0, -1, 1, 0}
603 };
604 
605 static const symbol s_0[] = { '0' };
606 static const symbol s_1[] = { '1' };
607 static const symbol s_2[] = { '2' };
608 static const symbol s_3[] = { '3' };
609 static const symbol s_4[] = { '4' };
610 static const symbol s_5[] = { '5' };
611 static const symbol s_6[] = { '6' };
612 static const symbol s_7[] = { '7' };
613 static const symbol s_8[] = { '8' };
614 static const symbol s_9[] = { '9' };
615 static const symbol s_10[] = { 0xD8, 0xA1 };
616 static const symbol s_11[] = { 0xD8, 0xA3 };
617 static const symbol s_12[] = { 0xD8, 0xA5 };
618 static const symbol s_13[] = { 0xD8, 0xA6 };
619 static const symbol s_14[] = { 0xD8, 0xA2 };
620 static const symbol s_15[] = { 0xD8, 0xA4 };
621 static const symbol s_16[] = { 0xD8, 0xA7 };
622 static const symbol s_17[] = { 0xD8, 0xA8 };
623 static const symbol s_18[] = { 0xD8, 0xA9 };
624 static const symbol s_19[] = { 0xD8, 0xAA };
625 static const symbol s_20[] = { 0xD8, 0xAB };
626 static const symbol s_21[] = { 0xD8, 0xAC };
627 static const symbol s_22[] = { 0xD8, 0xAD };
628 static const symbol s_23[] = { 0xD8, 0xAE };
629 static const symbol s_24[] = { 0xD8, 0xAF };
630 static const symbol s_25[] = { 0xD8, 0xB0 };
631 static const symbol s_26[] = { 0xD8, 0xB1 };
632 static const symbol s_27[] = { 0xD8, 0xB2 };
633 static const symbol s_28[] = { 0xD8, 0xB3 };
634 static const symbol s_29[] = { 0xD8, 0xB4 };
635 static const symbol s_30[] = { 0xD8, 0xB5 };
636 static const symbol s_31[] = { 0xD8, 0xB6 };
637 static const symbol s_32[] = { 0xD8, 0xB7 };
638 static const symbol s_33[] = { 0xD8, 0xB8 };
639 static const symbol s_34[] = { 0xD8, 0xB9 };
640 static const symbol s_35[] = { 0xD8, 0xBA };
641 static const symbol s_36[] = { 0xD9, 0x81 };
642 static const symbol s_37[] = { 0xD9, 0x82 };
643 static const symbol s_38[] = { 0xD9, 0x83 };
644 static const symbol s_39[] = { 0xD9, 0x84 };
645 static const symbol s_40[] = { 0xD9, 0x85 };
646 static const symbol s_41[] = { 0xD9, 0x86 };
647 static const symbol s_42[] = { 0xD9, 0x87 };
648 static const symbol s_43[] = { 0xD9, 0x88 };
649 static const symbol s_44[] = { 0xD9, 0x89 };
650 static const symbol s_45[] = { 0xD9, 0x8A };
651 static const symbol s_46[] = { 0xD9, 0x84, 0xD8, 0xA7 };
652 static const symbol s_47[] = { 0xD9, 0x84, 0xD8, 0xA3 };
653 static const symbol s_48[] = { 0xD9, 0x84, 0xD8, 0xA5 };
654 static const symbol s_49[] = { 0xD9, 0x84, 0xD8, 0xA2 };
655 static const symbol s_50[] = { 0xD8, 0xA1 };
656 static const symbol s_51[] = { 0xD8, 0xA7 };
657 static const symbol s_52[] = { 0xD9, 0x88 };
658 static const symbol s_53[] = { 0xD9, 0x8A };
659 static const symbol s_54[] = { 0xD8, 0xA3 };
660 static const symbol s_55[] = { 0xD8, 0xA2 };
661 static const symbol s_56[] = { 0xD8, 0xA7 };
662 static const symbol s_57[] = { 0xD8, 0xA5 };
663 static const symbol s_58[] = { 0xD9, 0x81, 0xD8, 0xA7 };
664 static const symbol s_59[] = { 0xD9, 0x88, 0xD8, 0xA7 };
665 static const symbol s_60[] = { 0xD8, 0xA8, 0xD8, 0xA7 };
666 static const symbol s_61[] = { 0xD8, 0xA8 };
667 static const symbol s_62[] = { 0xD9, 0x83 };
668 static const symbol s_63[] = { 0xD9, 0x8A };
669 static const symbol s_64[] = { 0xD8, 0xAA };
670 static const symbol s_65[] = { 0xD9, 0x86 };
671 static const symbol s_66[] = { 0xD8, 0xA3 };
672 static const symbol s_67[] = { 0xD8, 0xA7, 0xD8, 0xB3, 0xD8, 0xAA };
673 static const symbol s_68[] = { 0xD9, 0x8A };
674 
675 static int r_Normalize_pre(struct SN_env * z) {
676     int among_var;
677     {   int c1 = z->c;
678         while(1) {
679             int c2 = z->c;
680             {   int c3 = z->c;
681                 z->bra = z->c;
682                 among_var = find_among(z, a_0, 144);
683                 if (!(among_var)) goto lab3;
684                 z->ket = z->c;
685                 switch (among_var) {
686                     case 1:
687                         {   int ret = slice_del(z);
688                             if (ret < 0) return ret;
689                         }
690                         break;
691                     case 2:
692                         {   int ret = slice_from_s(z, 1, s_0);
693                             if (ret < 0) return ret;
694                         }
695                         break;
696                     case 3:
697                         {   int ret = slice_from_s(z, 1, s_1);
698                             if (ret < 0) return ret;
699                         }
700                         break;
701                     case 4:
702                         {   int ret = slice_from_s(z, 1, s_2);
703                             if (ret < 0) return ret;
704                         }
705                         break;
706                     case 5:
707                         {   int ret = slice_from_s(z, 1, s_3);
708                             if (ret < 0) return ret;
709                         }
710                         break;
711                     case 6:
712                         {   int ret = slice_from_s(z, 1, s_4);
713                             if (ret < 0) return ret;
714                         }
715                         break;
716                     case 7:
717                         {   int ret = slice_from_s(z, 1, s_5);
718                             if (ret < 0) return ret;
719                         }
720                         break;
721                     case 8:
722                         {   int ret = slice_from_s(z, 1, s_6);
723                             if (ret < 0) return ret;
724                         }
725                         break;
726                     case 9:
727                         {   int ret = slice_from_s(z, 1, s_7);
728                             if (ret < 0) return ret;
729                         }
730                         break;
731                     case 10:
732                         {   int ret = slice_from_s(z, 1, s_8);
733                             if (ret < 0) return ret;
734                         }
735                         break;
736                     case 11:
737                         {   int ret = slice_from_s(z, 1, s_9);
738                             if (ret < 0) return ret;
739                         }
740                         break;
741                     case 12:
742                         {   int ret = slice_from_s(z, 2, s_10);
743                             if (ret < 0) return ret;
744                         }
745                         break;
746                     case 13:
747                         {   int ret = slice_from_s(z, 2, s_11);
748                             if (ret < 0) return ret;
749                         }
750                         break;
751                     case 14:
752                         {   int ret = slice_from_s(z, 2, s_12);
753                             if (ret < 0) return ret;
754                         }
755                         break;
756                     case 15:
757                         {   int ret = slice_from_s(z, 2, s_13);
758                             if (ret < 0) return ret;
759                         }
760                         break;
761                     case 16:
762                         {   int ret = slice_from_s(z, 2, s_14);
763                             if (ret < 0) return ret;
764                         }
765                         break;
766                     case 17:
767                         {   int ret = slice_from_s(z, 2, s_15);
768                             if (ret < 0) return ret;
769                         }
770                         break;
771                     case 18:
772                         {   int ret = slice_from_s(z, 2, s_16);
773                             if (ret < 0) return ret;
774                         }
775                         break;
776                     case 19:
777                         {   int ret = slice_from_s(z, 2, s_17);
778                             if (ret < 0) return ret;
779                         }
780                         break;
781                     case 20:
782                         {   int ret = slice_from_s(z, 2, s_18);
783                             if (ret < 0) return ret;
784                         }
785                         break;
786                     case 21:
787                         {   int ret = slice_from_s(z, 2, s_19);
788                             if (ret < 0) return ret;
789                         }
790                         break;
791                     case 22:
792                         {   int ret = slice_from_s(z, 2, s_20);
793                             if (ret < 0) return ret;
794                         }
795                         break;
796                     case 23:
797                         {   int ret = slice_from_s(z, 2, s_21);
798                             if (ret < 0) return ret;
799                         }
800                         break;
801                     case 24:
802                         {   int ret = slice_from_s(z, 2, s_22);
803                             if (ret < 0) return ret;
804                         }
805                         break;
806                     case 25:
807                         {   int ret = slice_from_s(z, 2, s_23);
808                             if (ret < 0) return ret;
809                         }
810                         break;
811                     case 26:
812                         {   int ret = slice_from_s(z, 2, s_24);
813                             if (ret < 0) return ret;
814                         }
815                         break;
816                     case 27:
817                         {   int ret = slice_from_s(z, 2, s_25);
818                             if (ret < 0) return ret;
819                         }
820                         break;
821                     case 28:
822                         {   int ret = slice_from_s(z, 2, s_26);
823                             if (ret < 0) return ret;
824                         }
825                         break;
826                     case 29:
827                         {   int ret = slice_from_s(z, 2, s_27);
828                             if (ret < 0) return ret;
829                         }
830                         break;
831                     case 30:
832                         {   int ret = slice_from_s(z, 2, s_28);
833                             if (ret < 0) return ret;
834                         }
835                         break;
836                     case 31:
837                         {   int ret = slice_from_s(z, 2, s_29);
838                             if (ret < 0) return ret;
839                         }
840                         break;
841                     case 32:
842                         {   int ret = slice_from_s(z, 2, s_30);
843                             if (ret < 0) return ret;
844                         }
845                         break;
846                     case 33:
847                         {   int ret = slice_from_s(z, 2, s_31);
848                             if (ret < 0) return ret;
849                         }
850                         break;
851                     case 34:
852                         {   int ret = slice_from_s(z, 2, s_32);
853                             if (ret < 0) return ret;
854                         }
855                         break;
856                     case 35:
857                         {   int ret = slice_from_s(z, 2, s_33);
858                             if (ret < 0) return ret;
859                         }
860                         break;
861                     case 36:
862                         {   int ret = slice_from_s(z, 2, s_34);
863                             if (ret < 0) return ret;
864                         }
865                         break;
866                     case 37:
867                         {   int ret = slice_from_s(z, 2, s_35);
868                             if (ret < 0) return ret;
869                         }
870                         break;
871                     case 38:
872                         {   int ret = slice_from_s(z, 2, s_36);
873                             if (ret < 0) return ret;
874                         }
875                         break;
876                     case 39:
877                         {   int ret = slice_from_s(z, 2, s_37);
878                             if (ret < 0) return ret;
879                         }
880                         break;
881                     case 40:
882                         {   int ret = slice_from_s(z, 2, s_38);
883                             if (ret < 0) return ret;
884                         }
885                         break;
886                     case 41:
887                         {   int ret = slice_from_s(z, 2, s_39);
888                             if (ret < 0) return ret;
889                         }
890                         break;
891                     case 42:
892                         {   int ret = slice_from_s(z, 2, s_40);
893                             if (ret < 0) return ret;
894                         }
895                         break;
896                     case 43:
897                         {   int ret = slice_from_s(z, 2, s_41);
898                             if (ret < 0) return ret;
899                         }
900                         break;
901                     case 44:
902                         {   int ret = slice_from_s(z, 2, s_42);
903                             if (ret < 0) return ret;
904                         }
905                         break;
906                     case 45:
907                         {   int ret = slice_from_s(z, 2, s_43);
908                             if (ret < 0) return ret;
909                         }
910                         break;
911                     case 46:
912                         {   int ret = slice_from_s(z, 2, s_44);
913                             if (ret < 0) return ret;
914                         }
915                         break;
916                     case 47:
917                         {   int ret = slice_from_s(z, 2, s_45);
918                             if (ret < 0) return ret;
919                         }
920                         break;
921                     case 48:
922                         {   int ret = slice_from_s(z, 4, s_46);
923                             if (ret < 0) return ret;
924                         }
925                         break;
926                     case 49:
927                         {   int ret = slice_from_s(z, 4, s_47);
928                             if (ret < 0) return ret;
929                         }
930                         break;
931                     case 50:
932                         {   int ret = slice_from_s(z, 4, s_48);
933                             if (ret < 0) return ret;
934                         }
935                         break;
936                     case 51:
937                         {   int ret = slice_from_s(z, 4, s_49);
938                             if (ret < 0) return ret;
939                         }
940                         break;
941                 }
942                 goto lab2;
943             lab3:
944                 z->c = c3;
945                 {   int ret = skip_utf8(z->p, z->c, z->l, 1);
946                     if (ret < 0) goto lab1;
947                     z->c = ret;
948                 }
949             }
950         lab2:
951             continue;
952         lab1:
953             z->c = c2;
954             break;
955         }
956         z->c = c1;
957     }
958     return 1;
959 }
960 
961 static int r_Normalize_post(struct SN_env * z) {
962     int among_var;
963     {   int c1 = z->c;
964         z->lb = z->c; z->c = z->l;
965 
966         z->ket = z->c;
967         if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 5 || !((124 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab0;
968         if (!(find_among_b(z, a_1, 5))) goto lab0;
969         z->bra = z->c;
970         {   int ret = slice_from_s(z, 2, s_50);
971             if (ret < 0) return ret;
972         }
973         z->c = z->lb;
974     lab0:
975         z->c = c1;
976     }
977     {   int c2 = z->c;
978         while(1) {
979             int c3 = z->c;
980             {   int c4 = z->c;
981                 z->bra = z->c;
982                 if (z->c + 1 >= z->l || z->p[z->c + 1] >> 5 != 5 || !((124 >> (z->p[z->c + 1] & 0x1f)) & 1)) goto lab4;
983                 among_var = find_among(z, a_2, 5);
984                 if (!(among_var)) goto lab4;
985                 z->ket = z->c;
986                 switch (among_var) {
987                     case 1:
988                         {   int ret = slice_from_s(z, 2, s_51);
989                             if (ret < 0) return ret;
990                         }
991                         break;
992                     case 2:
993                         {   int ret = slice_from_s(z, 2, s_52);
994                             if (ret < 0) return ret;
995                         }
996                         break;
997                     case 3:
998                         {   int ret = slice_from_s(z, 2, s_53);
999                             if (ret < 0) return ret;
1000                         }
1001                         break;
1002                 }
1003                 goto lab3;
1004             lab4:
1005                 z->c = c4;
1006                 {   int ret = skip_utf8(z->p, z->c, z->l, 1);
1007                     if (ret < 0) goto lab2;
1008                     z->c = ret;
1009                 }
1010             }
1011         lab3:
1012             continue;
1013         lab2:
1014             z->c = c3;
1015             break;
1016         }
1017         z->c = c2;
1018     }
1019     return 1;
1020 }
1021 
1022 static int r_Checks1(struct SN_env * z) {
1023     int among_var;
1024     z->bra = z->c;
1025     if (z->c + 3 >= z->l || (z->p[z->c + 3] != 132 && z->p[z->c + 3] != 167)) return 0;
1026     among_var = find_among(z, a_3, 4);
1027     if (!(among_var)) return 0;
1028     z->ket = z->c;
1029     switch (among_var) {
1030         case 1:
1031             if (!(len_utf8(z->p) > 4)) return 0;
1032             z->I[2] = 1;
1033             z->I[1] = 0;
1034             z->I[0] = 1;
1035             break;
1036         case 2:
1037             if (!(len_utf8(z->p) > 3)) return 0;
1038             z->I[2] = 1;
1039             z->I[1] = 0;
1040             z->I[0] = 1;
1041             break;
1042     }
1043     return 1;
1044 }
1045 
1046 static int r_Prefix_Step1(struct SN_env * z) {
1047     int among_var;
1048     z->bra = z->c;
1049     if (z->c + 3 >= z->l || z->p[z->c + 3] >> 5 != 5 || !((188 >> (z->p[z->c + 3] & 0x1f)) & 1)) return 0;
1050     among_var = find_among(z, a_4, 5);
1051     if (!(among_var)) return 0;
1052     z->ket = z->c;
1053     switch (among_var) {
1054         case 1:
1055             if (!(len_utf8(z->p) > 3)) return 0;
1056             {   int ret = slice_from_s(z, 2, s_54);
1057                 if (ret < 0) return ret;
1058             }
1059             break;
1060         case 2:
1061             if (!(len_utf8(z->p) > 3)) return 0;
1062             {   int ret = slice_from_s(z, 2, s_55);
1063                 if (ret < 0) return ret;
1064             }
1065             break;
1066         case 3:
1067             if (!(len_utf8(z->p) > 3)) return 0;
1068             {   int ret = slice_from_s(z, 2, s_56);
1069                 if (ret < 0) return ret;
1070             }
1071             break;
1072         case 4:
1073             if (!(len_utf8(z->p) > 3)) return 0;
1074             {   int ret = slice_from_s(z, 2, s_57);
1075                 if (ret < 0) return ret;
1076             }
1077             break;
1078     }
1079     return 1;
1080 }
1081 
1082 static int r_Prefix_Step2(struct SN_env * z) {
1083     {   int c1 = z->c;
1084         if (!(eq_s(z, 4, s_58))) goto lab0;
1085         return 0;
1086     lab0:
1087         z->c = c1;
1088     }
1089     {   int c2 = z->c;
1090         if (!(eq_s(z, 4, s_59))) goto lab1;
1091         return 0;
1092     lab1:
1093         z->c = c2;
1094     }
1095     z->bra = z->c;
1096     if (z->c + 1 >= z->l || (z->p[z->c + 1] != 129 && z->p[z->c + 1] != 136)) return 0;
1097     if (!(find_among(z, a_5, 2))) return 0;
1098     z->ket = z->c;
1099     if (!(len_utf8(z->p) > 3)) return 0;
1100     {   int ret = slice_del(z);
1101         if (ret < 0) return ret;
1102     }
1103     return 1;
1104 }
1105 
1106 static int r_Prefix_Step3a_Noun(struct SN_env * z) {
1107     int among_var;
1108     z->bra = z->c;
1109     if (z->c + 3 >= z->l || (z->p[z->c + 3] != 132 && z->p[z->c + 3] != 167)) return 0;
1110     among_var = find_among(z, a_6, 4);
1111     if (!(among_var)) return 0;
1112     z->ket = z->c;
1113     switch (among_var) {
1114         case 1:
1115             if (!(len_utf8(z->p) > 5)) return 0;
1116             {   int ret = slice_del(z);
1117                 if (ret < 0) return ret;
1118             }
1119             break;
1120         case 2:
1121             if (!(len_utf8(z->p) > 4)) return 0;
1122             {   int ret = slice_del(z);
1123                 if (ret < 0) return ret;
1124             }
1125             break;
1126     }
1127     return 1;
1128 }
1129 
1130 static int r_Prefix_Step3b_Noun(struct SN_env * z) {
1131     int among_var;
1132     {   int c1 = z->c;
1133         if (!(eq_s(z, 4, s_60))) goto lab0;
1134         return 0;
1135     lab0:
1136         z->c = c1;
1137     }
1138     z->bra = z->c;
1139     if (z->c + 1 >= z->l || (z->p[z->c + 1] != 168 && z->p[z->c + 1] != 131)) return 0;
1140     among_var = find_among(z, a_7, 3);
1141     if (!(among_var)) return 0;
1142     z->ket = z->c;
1143     switch (among_var) {
1144         case 1:
1145             if (!(len_utf8(z->p) > 3)) return 0;
1146             {   int ret = slice_del(z);
1147                 if (ret < 0) return ret;
1148             }
1149             break;
1150         case 2:
1151             if (!(len_utf8(z->p) > 3)) return 0;
1152             {   int ret = slice_from_s(z, 2, s_61);
1153                 if (ret < 0) return ret;
1154             }
1155             break;
1156         case 3:
1157             if (!(len_utf8(z->p) > 3)) return 0;
1158             {   int ret = slice_from_s(z, 2, s_62);
1159                 if (ret < 0) return ret;
1160             }
1161             break;
1162     }
1163     return 1;
1164 }
1165 
1166 static int r_Prefix_Step3_Verb(struct SN_env * z) {
1167     int among_var;
1168     z->bra = z->c;
1169     among_var = find_among(z, a_8, 4);
1170     if (!(among_var)) return 0;
1171     z->ket = z->c;
1172     switch (among_var) {
1173         case 1:
1174             if (!(len_utf8(z->p) > 4)) return 0;
1175             {   int ret = slice_from_s(z, 2, s_63);
1176                 if (ret < 0) return ret;
1177             }
1178             break;
1179         case 2:
1180             if (!(len_utf8(z->p) > 4)) return 0;
1181             {   int ret = slice_from_s(z, 2, s_64);
1182                 if (ret < 0) return ret;
1183             }
1184             break;
1185         case 3:
1186             if (!(len_utf8(z->p) > 4)) return 0;
1187             {   int ret = slice_from_s(z, 2, s_65);
1188                 if (ret < 0) return ret;
1189             }
1190             break;
1191         case 4:
1192             if (!(len_utf8(z->p) > 4)) return 0;
1193             {   int ret = slice_from_s(z, 2, s_66);
1194                 if (ret < 0) return ret;
1195             }
1196             break;
1197     }
1198     return 1;
1199 }
1200 
1201 static int r_Prefix_Step4_Verb(struct SN_env * z) {
1202     z->bra = z->c;
1203     if (z->c + 5 >= z->l || z->p[z->c + 5] != 170) return 0;
1204     if (!(find_among(z, a_9, 3))) return 0;
1205     z->ket = z->c;
1206     if (!(len_utf8(z->p) > 4)) return 0;
1207     z->I[1] = 1;
1208     z->I[2] = 0;
1209     {   int ret = slice_from_s(z, 6, s_67);
1210         if (ret < 0) return ret;
1211     }
1212     return 1;
1213 }
1214 
1215 static int r_Suffix_Noun_Step1a(struct SN_env * z) {
1216     int among_var;
1217     z->ket = z->c;
1218     among_var = find_among_b(z, a_10, 10);
1219     if (!(among_var)) return 0;
1220     z->bra = z->c;
1221     switch (among_var) {
1222         case 1:
1223             if (!(len_utf8(z->p) >= 4)) return 0;
1224             {   int ret = slice_del(z);
1225                 if (ret < 0) return ret;
1226             }
1227             break;
1228         case 2:
1229             if (!(len_utf8(z->p) >= 5)) return 0;
1230             {   int ret = slice_del(z);
1231                 if (ret < 0) return ret;
1232             }
1233             break;
1234         case 3:
1235             if (!(len_utf8(z->p) >= 6)) return 0;
1236             {   int ret = slice_del(z);
1237                 if (ret < 0) return ret;
1238             }
1239             break;
1240     }
1241     return 1;
1242 }
1243 
1244 static int r_Suffix_Noun_Step1b(struct SN_env * z) {
1245     z->ket = z->c;
1246     if (z->c - 1 <= z->lb || z->p[z->c - 1] != 134) return 0;
1247     if (!(find_among_b(z, a_11, 1))) return 0;
1248     z->bra = z->c;
1249     if (!(len_utf8(z->p) > 5)) return 0;
1250     {   int ret = slice_del(z);
1251         if (ret < 0) return ret;
1252     }
1253     return 1;
1254 }
1255 
1256 static int r_Suffix_Noun_Step2a(struct SN_env * z) {
1257     z->ket = z->c;
1258     if (!(find_among_b(z, a_12, 3))) return 0;
1259     z->bra = z->c;
1260     if (!(len_utf8(z->p) > 4)) return 0;
1261     {   int ret = slice_del(z);
1262         if (ret < 0) return ret;
1263     }
1264     return 1;
1265 }
1266 
1267 static int r_Suffix_Noun_Step2b(struct SN_env * z) {
1268     z->ket = z->c;
1269     if (z->c - 3 <= z->lb || z->p[z->c - 1] != 170) return 0;
1270     if (!(find_among_b(z, a_13, 1))) return 0;
1271     z->bra = z->c;
1272     if (!(len_utf8(z->p) >= 5)) return 0;
1273     {   int ret = slice_del(z);
1274         if (ret < 0) return ret;
1275     }
1276     return 1;
1277 }
1278 
1279 static int r_Suffix_Noun_Step2c1(struct SN_env * z) {
1280     z->ket = z->c;
1281     if (z->c - 1 <= z->lb || z->p[z->c - 1] != 170) return 0;
1282     if (!(find_among_b(z, a_14, 1))) return 0;
1283     z->bra = z->c;
1284     if (!(len_utf8(z->p) >= 4)) return 0;
1285     {   int ret = slice_del(z);
1286         if (ret < 0) return ret;
1287     }
1288     return 1;
1289 }
1290 
1291 static int r_Suffix_Noun_Step2c2(struct SN_env * z) {
1292     z->ket = z->c;
1293     if (z->c - 1 <= z->lb || z->p[z->c - 1] != 169) return 0;
1294     if (!(find_among_b(z, a_15, 1))) return 0;
1295     z->bra = z->c;
1296     if (!(len_utf8(z->p) >= 4)) return 0;
1297     {   int ret = slice_del(z);
1298         if (ret < 0) return ret;
1299     }
1300     return 1;
1301 }
1302 
1303 static int r_Suffix_Noun_Step3(struct SN_env * z) {
1304     z->ket = z->c;
1305     if (z->c - 1 <= z->lb || z->p[z->c - 1] != 138) return 0;
1306     if (!(find_among_b(z, a_16, 1))) return 0;
1307     z->bra = z->c;
1308     if (!(len_utf8(z->p) >= 3)) return 0;
1309     {   int ret = slice_del(z);
1310         if (ret < 0) return ret;
1311     }
1312     return 1;
1313 }
1314 
1315 static int r_Suffix_Verb_Step1(struct SN_env * z) {
1316     int among_var;
1317     z->ket = z->c;
1318     among_var = find_among_b(z, a_17, 12);
1319     if (!(among_var)) return 0;
1320     z->bra = z->c;
1321     switch (among_var) {
1322         case 1:
1323             if (!(len_utf8(z->p) >= 4)) return 0;
1324             {   int ret = slice_del(z);
1325                 if (ret < 0) return ret;
1326             }
1327             break;
1328         case 2:
1329             if (!(len_utf8(z->p) >= 5)) return 0;
1330             {   int ret = slice_del(z);
1331                 if (ret < 0) return ret;
1332             }
1333             break;
1334         case 3:
1335             if (!(len_utf8(z->p) >= 6)) return 0;
1336             {   int ret = slice_del(z);
1337                 if (ret < 0) return ret;
1338             }
1339             break;
1340     }
1341     return 1;
1342 }
1343 
1344 static int r_Suffix_Verb_Step2a(struct SN_env * z) {
1345     int among_var;
1346     z->ket = z->c;
1347     among_var = find_among_b(z, a_18, 11);
1348     if (!(among_var)) return 0;
1349     z->bra = z->c;
1350     switch (among_var) {
1351         case 1:
1352             if (!(len_utf8(z->p) >= 4)) return 0;
1353             {   int ret = slice_del(z);
1354                 if (ret < 0) return ret;
1355             }
1356             break;
1357         case 2:
1358             if (!(len_utf8(z->p) >= 5)) return 0;
1359             {   int ret = slice_del(z);
1360                 if (ret < 0) return ret;
1361             }
1362             break;
1363         case 3:
1364             if (!(len_utf8(z->p) > 5)) return 0;
1365             {   int ret = slice_del(z);
1366                 if (ret < 0) return ret;
1367             }
1368             break;
1369         case 4:
1370             if (!(len_utf8(z->p) >= 6)) return 0;
1371             {   int ret = slice_del(z);
1372                 if (ret < 0) return ret;
1373             }
1374             break;
1375     }
1376     return 1;
1377 }
1378 
1379 static int r_Suffix_Verb_Step2b(struct SN_env * z) {
1380     z->ket = z->c;
1381     if (z->c - 3 <= z->lb || (z->p[z->c - 1] != 133 && z->p[z->c - 1] != 167)) return 0;
1382     if (!(find_among_b(z, a_19, 2))) return 0;
1383     z->bra = z->c;
1384     if (!(len_utf8(z->p) >= 5)) return 0;
1385     {   int ret = slice_del(z);
1386         if (ret < 0) return ret;
1387     }
1388     return 1;
1389 }
1390 
1391 static int r_Suffix_Verb_Step2c(struct SN_env * z) {
1392     int among_var;
1393     z->ket = z->c;
1394     if (z->c - 1 <= z->lb || z->p[z->c - 1] != 136) return 0;
1395     among_var = find_among_b(z, a_20, 2);
1396     if (!(among_var)) return 0;
1397     z->bra = z->c;
1398     switch (among_var) {
1399         case 1:
1400             if (!(len_utf8(z->p) >= 4)) return 0;
1401             {   int ret = slice_del(z);
1402                 if (ret < 0) return ret;
1403             }
1404             break;
1405         case 2:
1406             if (!(len_utf8(z->p) >= 6)) return 0;
1407             {   int ret = slice_del(z);
1408                 if (ret < 0) return ret;
1409             }
1410             break;
1411     }
1412     return 1;
1413 }
1414 
1415 static int r_Suffix_All_alef_maqsura(struct SN_env * z) {
1416     z->ket = z->c;
1417     if (z->c - 1 <= z->lb || z->p[z->c - 1] != 137) return 0;
1418     if (!(find_among_b(z, a_21, 1))) return 0;
1419     z->bra = z->c;
1420     {   int ret = slice_from_s(z, 2, s_68);
1421         if (ret < 0) return ret;
1422     }
1423     return 1;
1424 }
1425 
1426 extern int arabic_UTF_8_stem(struct SN_env * z) {
1427     z->I[2] = 1;
1428     z->I[1] = 1;
1429     z->I[0] = 0;
1430     {   int c1 = z->c;
1431         {   int ret = r_Checks1(z);
1432             if (ret < 0) return ret;
1433         }
1434         z->c = c1;
1435     }
1436 
1437     {   int ret = r_Normalize_pre(z);
1438         if (ret < 0) return ret;
1439     }
1440     z->lb = z->c; z->c = z->l;
1441 
1442     {   int m2 = z->l - z->c; (void)m2;
1443         {   int m3 = z->l - z->c; (void)m3;
1444             if (!(z->I[1])) goto lab2;
1445             {   int m4 = z->l - z->c; (void)m4;
1446                 {   int i = 1;
1447                     while(1) {
1448                         int m5 = z->l - z->c; (void)m5;
1449                         {   int ret = r_Suffix_Verb_Step1(z);
1450                             if (ret == 0) goto lab5;
1451                             if (ret < 0) return ret;
1452                         }
1453                         i--;
1454                         continue;
1455                     lab5:
1456                         z->c = z->l - m5;
1457                         break;
1458                     }
1459                     if (i > 0) goto lab4;
1460                 }
1461                 {   int m6 = z->l - z->c; (void)m6;
1462                     {   int ret = r_Suffix_Verb_Step2a(z);
1463                         if (ret == 0) goto lab7;
1464                         if (ret < 0) return ret;
1465                     }
1466                     goto lab6;
1467                 lab7:
1468                     z->c = z->l - m6;
1469                     {   int ret = r_Suffix_Verb_Step2c(z);
1470                         if (ret == 0) goto lab8;
1471                         if (ret < 0) return ret;
1472                     }
1473                     goto lab6;
1474                 lab8:
1475                     z->c = z->l - m6;
1476                     {   int ret = skip_b_utf8(z->p, z->c, z->lb, 1);
1477                         if (ret < 0) goto lab4;
1478                         z->c = ret;
1479                     }
1480                 }
1481             lab6:
1482                 goto lab3;
1483             lab4:
1484                 z->c = z->l - m4;
1485                 {   int ret = r_Suffix_Verb_Step2b(z);
1486                     if (ret == 0) goto lab9;
1487                     if (ret < 0) return ret;
1488                 }
1489                 goto lab3;
1490             lab9:
1491                 z->c = z->l - m4;
1492                 {   int ret = r_Suffix_Verb_Step2a(z);
1493                     if (ret == 0) goto lab2;
1494                     if (ret < 0) return ret;
1495                 }
1496             }
1497         lab3:
1498             goto lab1;
1499         lab2:
1500             z->c = z->l - m3;
1501             if (!(z->I[2])) goto lab10;
1502             {   int m7 = z->l - z->c; (void)m7;
1503                 {   int m8 = z->l - z->c; (void)m8;
1504                     {   int ret = r_Suffix_Noun_Step2c2(z);
1505                         if (ret == 0) goto lab13;
1506                         if (ret < 0) return ret;
1507                     }
1508                     goto lab12;
1509                 lab13:
1510                     z->c = z->l - m8;
1511 
1512                     if (!(z->I[0])) goto lab15;
1513                     goto lab14;
1514                 lab15:
1515                     {   int ret = r_Suffix_Noun_Step1a(z);
1516                         if (ret == 0) goto lab14;
1517                         if (ret < 0) return ret;
1518                     }
1519                     {   int m9 = z->l - z->c; (void)m9;
1520                         {   int ret = r_Suffix_Noun_Step2a(z);
1521                             if (ret == 0) goto lab17;
1522                             if (ret < 0) return ret;
1523                         }
1524                         goto lab16;
1525                     lab17:
1526                         z->c = z->l - m9;
1527                         {   int ret = r_Suffix_Noun_Step2b(z);
1528                             if (ret == 0) goto lab18;
1529                             if (ret < 0) return ret;
1530                         }
1531                         goto lab16;
1532                     lab18:
1533                         z->c = z->l - m9;
1534                         {   int ret = r_Suffix_Noun_Step2c1(z);
1535                             if (ret == 0) goto lab19;
1536                             if (ret < 0) return ret;
1537                         }
1538                         goto lab16;
1539                     lab19:
1540                         z->c = z->l - m9;
1541                         {   int ret = skip_b_utf8(z->p, z->c, z->lb, 1);
1542                             if (ret < 0) goto lab14;
1543                             z->c = ret;
1544                         }
1545                     }
1546                 lab16:
1547                     goto lab12;
1548                 lab14:
1549                     z->c = z->l - m8;
1550                     {   int ret = r_Suffix_Noun_Step1b(z);
1551                         if (ret == 0) goto lab20;
1552                         if (ret < 0) return ret;
1553                     }
1554                     {   int m10 = z->l - z->c; (void)m10;
1555                         {   int ret = r_Suffix_Noun_Step2a(z);
1556                             if (ret == 0) goto lab22;
1557                             if (ret < 0) return ret;
1558                         }
1559                         goto lab21;
1560                     lab22:
1561                         z->c = z->l - m10;
1562                         {   int ret = r_Suffix_Noun_Step2b(z);
1563                             if (ret == 0) goto lab23;
1564                             if (ret < 0) return ret;
1565                         }
1566                         goto lab21;
1567                     lab23:
1568                         z->c = z->l - m10;
1569                         {   int ret = r_Suffix_Noun_Step2c1(z);
1570                             if (ret == 0) goto lab20;
1571                             if (ret < 0) return ret;
1572                         }
1573                     }
1574                 lab21:
1575                     goto lab12;
1576                 lab20:
1577                     z->c = z->l - m8;
1578 
1579                     if (!(z->I[0])) goto lab25;
1580                     goto lab24;
1581                 lab25:
1582                     {   int ret = r_Suffix_Noun_Step2a(z);
1583                         if (ret == 0) goto lab24;
1584                         if (ret < 0) return ret;
1585                     }
1586                     goto lab12;
1587                 lab24:
1588                     z->c = z->l - m8;
1589                     {   int ret = r_Suffix_Noun_Step2b(z);
1590                         if (ret == 0) { z->c = z->l - m7; goto lab11; }
1591                         if (ret < 0) return ret;
1592                     }
1593                 }
1594             lab12:
1595             lab11:
1596                 ;
1597             }
1598             {   int ret = r_Suffix_Noun_Step3(z);
1599                 if (ret == 0) goto lab10;
1600                 if (ret < 0) return ret;
1601             }
1602             goto lab1;
1603         lab10:
1604             z->c = z->l - m3;
1605             {   int ret = r_Suffix_All_alef_maqsura(z);
1606                 if (ret == 0) goto lab0;
1607                 if (ret < 0) return ret;
1608             }
1609         }
1610     lab1:
1611     lab0:
1612         z->c = z->l - m2;
1613     }
1614     z->c = z->lb;
1615     {   int c11 = z->c;
1616         {   int c12 = z->c;
1617             {   int ret = r_Prefix_Step1(z);
1618                 if (ret == 0) { z->c = c12; goto lab27; }
1619                 if (ret < 0) return ret;
1620             }
1621         lab27:
1622             ;
1623         }
1624         {   int c13 = z->c;
1625             {   int ret = r_Prefix_Step2(z);
1626                 if (ret == 0) { z->c = c13; goto lab28; }
1627                 if (ret < 0) return ret;
1628             }
1629         lab28:
1630             ;
1631         }
1632         {   int c14 = z->c;
1633             {   int ret = r_Prefix_Step3a_Noun(z);
1634                 if (ret == 0) goto lab30;
1635                 if (ret < 0) return ret;
1636             }
1637             goto lab29;
1638         lab30:
1639             z->c = c14;
1640             if (!(z->I[2])) goto lab31;
1641             {   int ret = r_Prefix_Step3b_Noun(z);
1642                 if (ret == 0) goto lab31;
1643                 if (ret < 0) return ret;
1644             }
1645             goto lab29;
1646         lab31:
1647             z->c = c14;
1648             if (!(z->I[1])) goto lab26;
1649             {   int c15 = z->c;
1650                 {   int ret = r_Prefix_Step3_Verb(z);
1651                     if (ret == 0) { z->c = c15; goto lab32; }
1652                     if (ret < 0) return ret;
1653                 }
1654             lab32:
1655                 ;
1656             }
1657             {   int ret = r_Prefix_Step4_Verb(z);
1658                 if (ret == 0) goto lab26;
1659                 if (ret < 0) return ret;
1660             }
1661         }
1662     lab29:
1663     lab26:
1664         z->c = c11;
1665     }
1666 
1667     {   int ret = r_Normalize_post(z);
1668         if (ret < 0) return ret;
1669     }
1670     return 1;
1671 }
1672 
1673 extern struct SN_env * arabic_UTF_8_create_env(void) { return SN_create_env(0, 3); }
1674 
1675 extern void arabic_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
1676 
1677