1 // #include <stdio.h>
2 int d, z, C, h, P, K, ac, q, G, v, Q, R, D, L, W, M;
3
E(int e)4 void E(int e) {
5 *(char*) D++ = e;
6 }
7
o()8 void o() {
9 if (L) {
10 h = *(char*) L++;
11 if (h == 2) {
12 L = 0;
13 h = W;
14 }
15 } else
16 h = fgetc(Q);
17 }
18
X()19 int X() {
20 return isalnum(h) | h == 95;
21 }
22
Y()23 void Y() {
24 if (h == 92) {
25 o();
26 if (h == 110)
27 h = 10;
28 }
29 }
30
ad()31 void ad() {
32 int e, j, m;
33 while (isspace(h) | h == 35) {
34 if (h == 35) {
35 o();
36 ad();
37 if (d == 536) {
38 ad();
39 E(32);
40 *(int*) d = 1;
41 *(int*) (d + 4) = D;
42 }
43 while (h != 10) {
44 E(h);
45 o();
46 }
47 E(h);
48 E(2);
49 }
50 o();
51 }
52 C = 0;
53 d = h;
54 if (X()) {
55 E(32);
56 M = D;
57 while (X()) {
58 E(h);
59 o();
60 }
61 if (isdigit(d)) {
62 z = strtol(M, 0, 0);
63 d = 2;
64 } else {
65 *(char*) D = 32;
66 d = strstr(R, M - 1) - R;
67 *(char*) D = 0;
68 d = d * 8 + 256;
69 if (d > 536) {
70 d = P + d;
71 if (*(int*) d == 1) {
72 L = *(int*) (d + 4);
73 W = h;
74 o();
75 ad();
76 }
77 }
78 }
79 } else {
80 o();
81 if (d == 39) {
82 d = 2;
83 Y();
84 z = h;
85 o();
86 o();
87 } else if (d == 47 & h == 42) {
88 o();
89 while (h) {
90 while (h != 42)
91 o();
92 o();
93 if (h == 47)
94 h = 0;
95 }
96 o();
97 ad();
98 } else {
99 e
100 = "++#m--%am*@R<^1c/@%[_[H3c%@%[_[H3c+@.B#d-@%:_^BKd<<Z/03e>>`/03e<=0f>=/f<@.f>@1f==&g!='g&&k||#l&@.BCh^@.BSi|@.B+j~@/%Yd!@&d*@b";
101 while (j = *(char*) e++) {
102 m = *(char*) e++;
103 z = 0;
104 while ((C = *(char*) e++ - 98) < 0)
105 z = z * 64 + C + 64;
106 if (j == d & (m == h | m == 64)) {
107 if (m == h) {
108 o();
109 d = 1;
110 }
111 break;
112 }
113 }
114 }
115 }
116 }
117
ae(int g)118 void ae(int g) {
119 while( g&&g!=-1) {
120 *(char*) q++=g;
121 g=g>>8;
122 }
123 }
124
A(int e)125 void A(int e) {
126 int g;
127 while( e) {
128 g=*(int*) e;
129 *(int*) e=q-e-4;
130 e=g;
131 }
132 }
133
s(int g,int e)134 int s(int g, int e) {
135 ae(g);
136 *(int*) q = e;
137 e = q;
138 q = q + 4;
139 return e;
140 }
141
H(int e)142 void H(int e) {
143 s(184,e);
144 }
145
B(int e)146 int B(int e) {
147 return s(233,e);
148 }
149
S(int j,int e)150 int S(int j, int e) {
151 ae(1032325);
152 return s(132 + j, e);
153 }
154
Z(int e)155 void Z(int e) {
156 ae( 49465);
157 H(0);
158 ae( 15);
159 ae( e+144);
160 ae( 192);
161 }
162
N(int j,int e)163 void N(int j, int e) {
164 ae(j + 131);
165 s((e > -512 && e < 512) << 7 | 5, e);
166 }
167
T(int j)168 void T (int j) {
169 int g,e,m,aa;
170 g=1;
171 if( d == 34) {
172 H(v);
173 while( h!=34) {
174 Y ();
175 *(char*) v++=h;
176 o ();
177 }
178 *(char*) v=0;
179 v=v +4&-4;
180 o ();
181 ad();
182 }
183 else {
184 aa=C;
185 m= z;
186 e=d;
187 ad();
188 if( e == 2) {
189 H(m);
190 }
191 else if( aa == 2) {
192 T(0);
193 s(185,0);
194 if( e == 33)Z(m);
195 else ae( m);
196 }
197 else if( e == 40) {
198 w ();
199 ad();
200 }
201 else if( e == 42) {
202 ad();
203 e=d;
204 ad();
205 ad();
206 if( d == 42) {
207 ad();
208 ad();
209 ad();
210 ad();
211 e=0;
212 }
213 ad();
214 T(0);
215 if( d == 61) {
216 ad();
217 ae( 80);
218 w ();
219 ae( 89);
220 ae( 392+(e == 256));
221 }
222 else if( e) {
223 if( e == 256)ae( 139);
224 else ae( 48655);
225 q++;
226 }
227 }
228 else if( e == 38) {
229 N(10,*(int*) d);
230 ad();
231 }
232 else {
233 g=*(int*) e;
234 if(!g)g=dlsym(0,M);
235 if( d == 61&j) {
236 ad();
237 w ();
238 N(6,g);
239 }
240 else if( d!= 40) {
241 N(8,g);
242 if( C == 11) {
243 N(0,g);
244 ae( z);
245 ad();
246 }
247 }
248 }
249 }
250 if( d == 40) {
251 if( g == 1)ae( 80);
252 m= s(60545,0);
253 ad();
254 j=0;
255 while( d!= 41) {
256 w ();
257 s(2393225,j);
258 if( d == 44)ad();
259 j=j +4;
260 }
261 *(int*) m= j;
262 ad();
263 if(!g) {
264 e=e +4;
265 *(int*) e=s(232,*(int*) e);
266 }
267 else if( g == 1) {
268 s(2397439,j);
269 j=j +4;
270 }
271 else {
272 s(232,g-q-5);
273 }
274 if( j)s(50305,j);
275 }
276 }
277
O(int j)278 void O (int j) {
279 int e,g,m;
280 if( j--== 1)T(1);
281 else {
282 O (j);
283 m= 0;
284 while( j == C) {
285 g=d;
286 e=z;
287 ad();
288 if( j>8) {
289 m= S(e,m);
290 O (j);
291 }
292 else {
293 ae( 80);
294 O (j);
295 ae( 89);
296 if( j == 4|j == 5) {
297 Z(e);
298 }
299 else {
300 ae( e);
301 if( g == 37)ae( 146);
302 }
303 }
304 }
305 if( m&&j>8) {
306 m= S(e,m);
307 H(e^1);
308 B(5);
309 A(m);
310 H(e);
311 }
312 }
313 }
314
w()315 void w() {
316 O(11);
317 }
318
U()319 int U() {
320 w();
321 return S(0, 0);
322 }
323
I(int j)324 void I (int j) {
325 int m,g,e;
326 if( d == 288) {
327 ad();
328 ad();
329 m= U ();
330 ad();
331 I (j);
332 if( d == 312) {
333 ad();
334 g=B(0);
335 A(m);
336 I (j);
337 A(g);
338 }
339 else {
340 A(m);
341 }
342 }
343 else if( d == 352|d == 504) {
344 e=d;
345 ad();
346 ad();
347 if( e == 352) {
348 g=q;
349 m= U ();
350 }
351 else {
352 if( d!= 59)w ();
353 ad();
354 g=q;
355 m= 0;
356 if( d!= 59)m= U ();
357 ad();
358 if( d!= 41) {
359 e=B(0);
360 w ();
361 B(g-q-5);
362 A(e);
363 g=e +4;
364 }
365 }
366 ad();
367 I(&m);
368 B(g-q-5);
369 A(m);
370 }
371 else if( d == 123) {
372 ad();
373 ab(1);
374 while( d!= 125)I (j);
375 ad();
376 }
377 else {
378 if( d == 448) {
379 ad();
380 if( d!= 59)w ();
381 K=B(K);
382 }
383 else if( d == 400) {
384 ad();
385 *(int*) j=B(*(int*) j);
386 }
387 else if( d!= 59)w ();
388 ad();
389 }
390 }
391
ab(int j)392 void ab (int j) {
393 int m;
394 while( d == 256|d!=-1&!j) {
395 if( d == 256) {
396 ad();
397 while( d!= 59) {
398 if( j) {
399 G=G +4;
400 *(int*) d=-G;
401 }
402 else {
403 *(int*) d=v;
404 v=v +4;
405 }
406 ad();
407 if( d == 44)ad() ;
408 }
409 ad();
410 }
411 else {
412 A(*(int*)(d +4));
413 *(int*) d=q;
414 ad();
415 ad();
416 m= 8;
417 while( d!= 41) {
418 *(int*) d=m;
419 m= m +4;
420 ad();
421 if( d == 44)ad();
422 }
423 ad();
424 K=G=0;
425 ae( 15042901);
426 m= s(60545,0);
427 I(0);
428 A(K);
429 ae( 50121);
430 *(int*) m= G;
431 }
432 }
433 }
434
run(int g,int e)435 int run(int g, int e) {
436 return (*(int(*)()) *(int*) (P + 592))(g, e);
437 }
438
main(int g,int e)439 int main(int g, int e) {
440 int result;
441 Q = stdin;
442 if (g-- > 1) {
443 e = e + 4;
444 Q = fopen(*(int*) e, "r");
445 if (!Q) {
446 fprintf(stderr, "otcc-ansi.c: could not open file %s\n", *(int*) e);
447 return -2;
448 }
449 }
450 D = strcpy(R = calloc(1, 99999), " int if else while break return for define main ") + 48;
451 v = calloc(1, 99999);
452 q = ac = calloc(1, 99999);
453 P = calloc(1, 99999);
454 o();
455 ad();
456 ab(0);
457 if (mprotect(ac & (~ 4095), (99999 + 4095) & (~ 4095), 7)) {
458 printf("Mprotect failed. %d\n", errno);
459 return -1;
460 }
461 fprintf(stderr, "otcc-ansi.c: About to execute compiled code:\n");
462 result = run(g, e);
463 fprintf(stderr, "atcc-ansi.c: result: %d\n", result);
464 return result;
465 }
466
467