From 951c78018cc91c58699aef95c0ccc20f34065162 Mon Sep 17 00:00:00 2001 From: Coccinelle Date: Sun, 3 Oct 2010 14:03:03 +0200 Subject: [PATCH] Release coccinelle-0.1.11rc1 Release Candidate 1 for coccinelle-0.1.11 --- .subdirs | 1 - Makefile | 72 +- changes.txt | 29 + cocci.ml | 164 +- cocci.mli | 25 +- commitmsg | 32 +- commitmsg~ | 3 + commons/common.ml | 26 +- ctl/Makefile | 10 +- ctl/ast_ctl.ml | 38 +- ctl/ctl_engine.ml | 38 +- ctl/ctl_engine.mli | 22 + ctl/flag_ctl.ml | 84 +- ctl/pretty_print_ctl.ml | 38 +- ctl/pretty_print_ctl.mli | 22 + ctl/test_ctl.ml | 38 +- ctl/wrapper_ctl.ml | 38 +- ctl/wrapper_ctl.mli | 22 + demos/orgmode.c | 3 + demos/orgmode.cocci | 26 + demos/regexp.c | 5 + demos/regexp.cocci | 74 + demos/spp/Makefile | 15 + demos/spp/test | 21 + demos/spp/test.c | 12 + demos/spp/test.cocci | 7 + demos/spp/test.h | 6 + demos/spp/test2.c | 5 + demos/spp/testpy.cocci | 12 + demos/virt.c | 1 + demos/virt.cocci | 27 + docs/manual/cocci_syntax.tex | 13 +- docs/manual/examples.tex | 94 +- docs/manual/main.tex | 2 +- docs/manual/main_grammar.pdf | Bin 273172 -> 287589 bytes docs/manual/main_grammar.tex | 2 +- docs/manual/manual.pdf | Bin 351528 -> 364897 bytes docs/manual/options.pdf | Bin 94848 -> 94612 bytes docs/manual/python.tex | 49 + docs/manual/tips.tex | 2 +- docs/spatch.1 | 6 +- engine/Makefile | 10 +- engine/asttoctl.ml | 38 +- engine/asttoctl.mli | 22 + engine/asttoctl2.ml | 204 +- engine/asttoctl2.mli | 22 + engine/asttomember.ml | 40 +- engine/asttomember.mli | 22 + engine/c_vs_c.ml | 38 +- engine/c_vs_c.mli | 22 + engine/check_exhaustive_pattern.ml | 38 +- engine/check_reachability.ml | 38 +- engine/check_reachability.mli | 22 + engine/cocci_vs_c.ml | 197 +- engine/cocci_vs_c.mli | 28 +- engine/ctlcocci_integration.ml | 40 +- engine/ctlcocci_integration.mli | 22 + engine/ctltotex.ml | 39 +- engine/ctltotex.mli | 22 + engine/flag_engine.ml | 68 +- engine/flag_matcher.ml | 90 +- engine/isomorphisms_c_c.ml | 38 +- engine/lib_engine.ml | 40 +- engine/lib_matcher_c.ml | 44 +- engine/lib_matcher_c.mli | 22 + engine/main.ml | 38 +- engine/pattern_c.ml | 71 +- engine/pattern_c.mli | 22 + engine/postprocess_transinfo.ml | 38 +- engine/postprocess_transinfo.mli | 22 + engine/pretty_print_engine.ml | 39 +- engine/pretty_print_engine.mli | 22 + engine/sgrep.ml | 62 +- engine/transformation_c.ml | 136 +- engine/transformation_c.mli | 22 + env.sh | 18 +- flag_cocci.ml | 38 +- globals/Makefile | 20 + globals/config.ml.in | 2 +- globals/flag.ml | 25 +- main.ml | 66 +- parsing_c/ast_c.ml | 24 +- parsing_c/compare_c.ml | 21 +- parsing_c/compare_c.mli | 5 +- parsing_c/control_flow_c.ml | 2 + parsing_c/control_flow_c.mli | 1 + parsing_c/control_flow_c_build.ml | 91 +- parsing_c/flag_parsing_c.ml | 1 + parsing_c/lib_parsing_c.ml | 3 +- parsing_c/parse_c.ml | 2 +- parsing_c/parsing_consistency_c.ml | 6 +- parsing_c/parsing_hacks.ml | 24 +- parsing_c/pretty_print_c.ml | 11 +- parsing_c/test_parsing_c.ml | 13 +- parsing_c/token_views_c.ml | 37 +- parsing_c/type_annoter_c.ml | 19 +- parsing_c/unparse_c.ml | 10 +- parsing_c/unparse_cocci.ml | 71 +- parsing_c/unparse_cocci.mli | 2 +- parsing_c/unparse_hrule.ml | 12 +- parsing_c/visitor_c.ml | 28 +- parsing_c/visitor_c.mli | 2 + parsing_cocci/.depend | 8 +- parsing_cocci/Makefile | 10 +- parsing_cocci/adjacency.ml | 38 +- parsing_cocci/adjacency.mli | 22 + parsing_cocci/adjust_pragmas.ml | 79 +- parsing_cocci/adjust_pragmas.mli | 22 + parsing_cocci/arity.ml | 90 +- parsing_cocci/arity.mli | 22 + parsing_cocci/ast0_cocci.ml | 63 +- parsing_cocci/ast0_cocci.mli | 45 +- parsing_cocci/ast0toast.ml | 132 +- parsing_cocci/ast0toast.mli | 22 + parsing_cocci/ast_cocci.ml | 105 +- parsing_cocci/ast_cocci.mli | 58 +- parsing_cocci/check_meta.ml | 88 +- parsing_cocci/check_meta.mli | 22 + parsing_cocci/comm_assoc.ml | 38 +- parsing_cocci/comm_assoc.mli | 22 + parsing_cocci/compute_lines.ml | 56 +- parsing_cocci/compute_lines.mli | 22 + parsing_cocci/context_neg.ml | 68 +- parsing_cocci/context_neg.mli | 22 + parsing_cocci/data.ml | 48 +- parsing_cocci/data.mli | 32 +- parsing_cocci/disjdistr.ml | 38 +- parsing_cocci/disjdistr.mli | 22 + parsing_cocci/flag_parsing_cocci.ml | 81 +- parsing_cocci/free_vars.ml | 46 +- parsing_cocci/free_vars.mli | 22 + parsing_cocci/function_prototypes.ml | 54 +- parsing_cocci/function_prototypes.mli | 22 + parsing_cocci/get_constants.ml | 44 +- parsing_cocci/get_constants.mli | 22 + parsing_cocci/get_constants2.ml | 153 +- parsing_cocci/get_constants2.mli | 25 +- parsing_cocci/index.ml | 50 +- parsing_cocci/index.mli | 22 + parsing_cocci/insert_plus.ml | 149 +- parsing_cocci/insert_plus.mli | 22 + parsing_cocci/iso_compile.ml | 38 +- parsing_cocci/iso_compile.mli | 22 + parsing_cocci/iso_pattern.ml | 100 +- parsing_cocci/iso_pattern.mli | 22 + parsing_cocci/lexer_cocci.mll | 69 +- parsing_cocci/lexer_script.mll | 38 +- parsing_cocci/main.ml | 38 +- parsing_cocci/merge.ml | 38 +- parsing_cocci/merge.mli | 22 + parsing_cocci/parse_aux.ml | 59 +- parsing_cocci/parse_cocci.ml | 125 +- parsing_cocci/parse_cocci.mli | 25 +- parsing_cocci/parser_cocci.mly | 38 +- parsing_cocci/parser_cocci_menhir.ml | 7464 +++++++++--------- parsing_cocci/parser_cocci_menhir.mli | 11 +- parsing_cocci/parser_cocci_menhir.mly | 159 +- parsing_cocci/plus.ml | 38 +- parsing_cocci/plus.mli | 22 + parsing_cocci/pretty_print_cocci.ml | 71 +- parsing_cocci/pretty_print_cocci.mli | 22 + parsing_cocci/semantic_cocci.ml | 46 +- parsing_cocci/simple_assignments.ml | 38 +- parsing_cocci/simple_assignments.mli | 22 + parsing_cocci/single_statement.ml | 101 +- parsing_cocci/single_statement.mli | 22 + parsing_cocci/test.cocci | 20 + parsing_cocci/test2.cocci | 20 + parsing_cocci/test_exps.ml | 38 +- parsing_cocci/test_exps.mli | 22 + parsing_cocci/top_level.ml | 38 +- parsing_cocci/top_level.mli | 22 + parsing_cocci/type_cocci.ml | 38 +- parsing_cocci/type_cocci.mli | 22 + parsing_cocci/type_infer.ml | 312 +- parsing_cocci/type_infer.mli | 22 + parsing_cocci/unify_ast.ml | 38 +- parsing_cocci/unify_ast.mli | 22 + parsing_cocci/unitary_ast0.ml | 40 +- parsing_cocci/unitary_ast0.mli | 22 + parsing_cocci/unparse_ast0.ml | 40 +- parsing_cocci/unparse_ast0.mli | 22 + parsing_cocci/visitor_ast.ml | 52 +- parsing_cocci/visitor_ast.mli | 22 + parsing_cocci/visitor_ast0.ml | 38 +- parsing_cocci/visitor_ast0.mli | 22 + parsing_cocci/visitor_ast0_types.ml | 38 +- popl/Makefile | 104 + popl/ast_popl.ml | 38 + popl/asttopopl.ml | 74 + popl/asttopopl.mli | 23 + popl/insert_befaft.ml | 113 + popl/insert_befaft.mli | 23 + popl/insert_quantifiers.ml | 95 + popl/insert_quantifiers.mli | 23 + popl/popl.ml | 39 + popl/popl.mli | 27 + popl/popltoctl.ml | 202 + popl/popltoctl.mli | 27 + popl/pretty_print_popl.ml | 76 + popl/pretty_print_popl.mli | 24 + popl09/.depend | 33 + popl09/Makefile | 102 + popl09/ast_popl.ml | 48 + popl09/asttopopl.ml | 98 + popl09/asttopopl.mli | 23 + popl09/flag_popl.ml | 24 + popl09/insert_quantifiers.ml | 113 + popl09/insert_quantifiers.mli | 23 + popl09/popl.ml | 38 + popl09/popl.mli | 27 + popl09/popltoctl.ml | 237 + popl09/popltoctl.mli | 27 + popl09/pretty_print_popl.ml | 97 + popl09/pretty_print_popl.mli | 24 + python/Makefile | 10 +- python/coccilib/org.py | 9 + python/coccilib/output_base.py | 24 +- python/coccilib/output_gui.py | 125 - python/coccilib/output_trac.py | 152 +- python/no_pycocci.ml | 38 +- python/no_pycocci_aux.ml | 38 +- python/yes_pycocci.ml | 38 +- python/yes_pycocci_aux.ml | 38 +- scripts/coccicheck/Makefile | 52 + scripts/coccicheck/README | 36 + scripts/coccicheck/bin/update_result_tree | 68 + scripts/coccicheck/cocci/badzero.cocci | 36 + scripts/coccicheck/cocci/empty.cocci.model | 1 + scripts/coccicheck/cocci/find_unsigned.cocci | 28 + scripts/coccicheck/cocci/isnull.cocci | 41 + scripts/coccicheck/cocci/kmalloc7.cocci | 76 + scripts/coccicheck/cocci/malloc.cocci | 76 + scripts/coccicheck/cocci/notand.cocci | 33 + scripts/coccicheck/cocci/notand.h | 828 ++ scripts/coccicheck/cocci/notnull.cocci | 86 + scripts/coccicheck/cocci/null_ref.cocci | 79 + scripts/coccicheck/cocci/open.cocci | 77 + scripts/coccicheck/cocci/unused.cocci | 46 + scripts/coccicheck/configure | 27 + scripts/extract_c_and_res.pl | 20 + scripts/extract_examples.pl | 20 + scripts/extractor_README.pl | 20 + scripts/gather_failed.pl | 20 + scripts/readme.pl | 20 + scripts/stat_directories.pl | 20 + scripts/stat_directories_complete.pl | 20 + scripts/stat_directory_complete.pl | 20 + standard.h | 2 - test.ml | 222 +- testing.ml | 53 +- testing.mli | 25 +- tests/SCORE_expected.sexp | 159 - tests/SCORE_expected.sexp.save | 154 - tests/addaft.c | 16 + tests/addaft.cocci | 7 + tests/addaft.res | 8 + tests/addbefore.c | 8 + tests/addbefore.cocci | 8 + tests/addbefore.res | 9 + tests/addbeforeafter.c | 8 + tests/addbeforeafter.cocci | 9 + tests/addbeforeafter.res | 10 + tests/addtoo.c | 16 + tests/addtoo.cocci | 7 + tests/addtoo.res | 8 + tests/befS.c | 14 + tests/befS.cocci | 6 + tests/befS.res | 22 + tests/doundo.c | 8 + tests/doundo.cocci | 11 + tests/doundo.res | 8 + tests/ifb.c | 12 + tests/justremove.c | 17 + tests/justremove.cocci | 6 + tests/justremove.res | 6 + tests/labels_metastatement.res | 4 +- tests/regexp.c | 9 + tests/regexp.cocci | 44 + tests/regexp.res | 23 + tests/regexp2.c | 10 + tests/regexp2.cocci | 49 + tests/regexp2.res | 24 + tests/regexp3.c | 11 + tests/regexp3.cocci | 60 + tests/regexp3.res | 28 + tests/sizestar.c | 10 + tests/sizestar.cocci | 6 + tests/sizestar.res | 10 + tests/test_s.c | 41 + tests/test_s.cocci | 13 + tests/test_s.res | 41 + tests/tyex.c | 12 + tests/tyex.cocci | 40 + tests/tyex.res | 13 + tools/Makefile | 20 + tools/a.out | Bin 68789 -> 0 bytes tools/alloc_free.ml | 22 + tools/bridge.ml | 22 + tools/dir_stats.ml | 22 + tools/extract_c_and_res.ml | 22 + tools/generate_dependencies.ml | 22 + tools/gitgrep.ml | 22 + tools/gitsort.ml | 22 + tools/licensify.ml | 70 +- tools/process_isoprofile.ml | 22 + tools/split_patch.ml | 22 + tools/spp.ml | 22 + 308 files changed, 13471 insertions(+), 6892 deletions(-) delete mode 100644 .subdirs rewrite commitmsg (99%) create mode 100644 commitmsg~ rewrite ctl/flag_ctl.ml (68%) create mode 100644 demos/orgmode.c create mode 100644 demos/orgmode.cocci create mode 100644 demos/regexp.c create mode 100644 demos/regexp.cocci create mode 100644 demos/spp/Makefile create mode 100644 demos/spp/test create mode 100644 demos/spp/test.c create mode 100644 demos/spp/test.cocci create mode 100644 demos/spp/test.h create mode 100644 demos/spp/test2.c create mode 100644 demos/spp/testpy.cocci create mode 100644 demos/virt.c create mode 100644 demos/virt.cocci create mode 100644 docs/manual/python.tex rewrite engine/flag_engine.ml (70%) rewrite engine/flag_matcher.ml (62%) rewrite engine/lib_matcher_c.ml (99%) rewrite parsing_cocci/flag_parsing_cocci.ml (75%) rewrite parsing_cocci/semantic_cocci.ml (96%) create mode 100644 popl/Makefile create mode 100644 popl/ast_popl.ml create mode 100644 popl/asttopopl.ml create mode 100644 popl/asttopopl.mli create mode 100644 popl/insert_befaft.ml create mode 100644 popl/insert_befaft.mli create mode 100644 popl/insert_quantifiers.ml create mode 100644 popl/insert_quantifiers.mli create mode 100644 popl/popl.ml create mode 100644 popl/popl.mli create mode 100644 popl/popltoctl.ml create mode 100644 popl/popltoctl.mli create mode 100644 popl/pretty_print_popl.ml create mode 100644 popl/pretty_print_popl.mli create mode 100644 popl09/.depend create mode 100644 popl09/Makefile create mode 100644 popl09/ast_popl.ml create mode 100644 popl09/asttopopl.ml create mode 100644 popl09/asttopopl.mli create mode 100644 popl09/flag_popl.ml create mode 100644 popl09/insert_quantifiers.ml create mode 100644 popl09/insert_quantifiers.mli create mode 100644 popl09/popl.ml create mode 100644 popl09/popl.mli create mode 100644 popl09/popltoctl.ml create mode 100644 popl09/popltoctl.mli create mode 100644 popl09/pretty_print_popl.ml create mode 100644 popl09/pretty_print_popl.mli create mode 100644 python/coccilib/org.py delete mode 100644 python/coccilib/output_gui.py rewrite python/coccilib/output_trac.py (90%) create mode 100644 scripts/coccicheck/Makefile create mode 100644 scripts/coccicheck/README create mode 100755 scripts/coccicheck/bin/update_result_tree create mode 100644 scripts/coccicheck/cocci/badzero.cocci create mode 100644 scripts/coccicheck/cocci/empty.cocci.model create mode 100644 scripts/coccicheck/cocci/find_unsigned.cocci create mode 100644 scripts/coccicheck/cocci/isnull.cocci create mode 100644 scripts/coccicheck/cocci/kmalloc7.cocci create mode 100644 scripts/coccicheck/cocci/malloc.cocci create mode 100644 scripts/coccicheck/cocci/notand.cocci create mode 100644 scripts/coccicheck/cocci/notand.h create mode 100644 scripts/coccicheck/cocci/notnull.cocci create mode 100644 scripts/coccicheck/cocci/null_ref.cocci create mode 100644 scripts/coccicheck/cocci/open.cocci create mode 100644 scripts/coccicheck/cocci/unused.cocci create mode 100755 scripts/coccicheck/configure rewrite test.ml (93%) delete mode 100644 tests/SCORE_expected.sexp delete mode 100644 tests/SCORE_expected.sexp.save create mode 100644 tests/addaft.c create mode 100644 tests/addaft.cocci create mode 100644 tests/addaft.res create mode 100644 tests/addbefore.c create mode 100644 tests/addbefore.cocci create mode 100644 tests/addbefore.res create mode 100644 tests/addbeforeafter.c create mode 100644 tests/addbeforeafter.cocci create mode 100644 tests/addbeforeafter.res create mode 100644 tests/addtoo.c create mode 100644 tests/addtoo.cocci create mode 100644 tests/addtoo.res create mode 100644 tests/befS.c create mode 100644 tests/befS.cocci create mode 100644 tests/befS.res create mode 100644 tests/doundo.c create mode 100644 tests/doundo.cocci create mode 100644 tests/doundo.res create mode 100644 tests/ifb.c create mode 100644 tests/justremove.c create mode 100644 tests/justremove.cocci create mode 100644 tests/justremove.res create mode 100644 tests/regexp.c create mode 100644 tests/regexp.cocci create mode 100644 tests/regexp.res create mode 100644 tests/regexp2.c create mode 100644 tests/regexp2.cocci create mode 100644 tests/regexp2.res create mode 100644 tests/regexp3.c create mode 100644 tests/regexp3.cocci create mode 100644 tests/regexp3.res create mode 100644 tests/sizestar.c create mode 100644 tests/sizestar.cocci create mode 100644 tests/sizestar.res create mode 100644 tests/test_s.c create mode 100644 tests/test_s.cocci create mode 100644 tests/test_s.res create mode 100644 tests/tyex.c create mode 100644 tests/tyex.cocci create mode 100644 tests/tyex.res delete mode 100755 tools/a.out diff --git a/.subdirs b/.subdirs deleted file mode 100644 index b29c734..0000000 --- a/.subdirs +++ /dev/null @@ -1 +0,0 @@ -flag_cocci.cmi cocci.cmi testing.cmi test.cmi main.cmi: commons globals menhirlib ctl parsing_cocci parsing_c engine popl09 extra python diff --git a/Makefile b/Makefile index 7d216f6..c2b7b5c 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,24 @@ # Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix # This file is part of Coccinelle. -# +# # Coccinelle is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, according to version 2 of the License. -# +# # Coccinelle is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with Coccinelle. If not, see . -# +# # The authors reserve the right to distribute this or future versions of # Coccinelle under other licenses. + ############################################################################# # Configuration section ############################################################################# @@ -25,6 +26,7 @@ -include Makefile.config VERSION=$(shell cat globals/config.ml.in |grep version |perl -p -e 's/.*"(.*)".*/$$1/;') +CCVERSION=$(shell cat scripts/coccicheck/README |grep "Coccicheck version" |perl -p -e 's/.*version (.*)[ ]*/$$1/;') ############################################################################## # Variables @@ -54,16 +56,16 @@ LIBS=commons/commons.cma \ globals/globals.cma \ ctl/ctl.cma \ parsing_cocci/cocci_parser.cma parsing_c/parsing_c.cma \ - engine/cocciengine.cma \ + engine/cocciengine.cma popl09/popl.cma \ extra/extra.cma $(PYCMA) python/coccipython.cma #used for clean: and depend: and a little for rec & rec.opt MAKESUBDIRS=commons ocamlsexp \ globals menhirlib $(PYDIR) ctl parsing_cocci parsing_c \ - engine extra python + engine popl09 extra python INCLUDEDIRS=commons commons/ocamlextra ocamlsexp \ globals menhirlib $(PYDIR) ctl \ - parsing_cocci parsing_c engine extra python + parsing_cocci parsing_c engine popl09 extra python ############################################################################## # Generic variables @@ -80,7 +82,7 @@ EXEC=$(TARGET) # Generic ocaml variables ############################################################################## -OCAMLCFLAGS= #-g -dtypes # -w A +OCAMLCFLAGS= -g -dtypes # -w A # for profiling add -p -inline 0 # but 'make forprofiling' below does that for you. @@ -157,6 +159,7 @@ $(MAKESUBDIRS:%=%.opt): # parsing_c:parsing_cocci # ctl:globals commons # engine: parsing_cocci parsing_c ctl +# popl09:engine # extra: parsing_cocci parsing_c ctl # pycaml: # python:pycaml parsing_cocci parsing_c @@ -291,7 +294,7 @@ install-python: $(DESTDIR)$(SHAREDIR)/python/coccilib/coccigui $(INSTALL_LIB) dllpycaml_stubs.so $(DESTDIR)$(LIBDIR) -install: install-common +install: install-common @if test -x spatch -a ! -x spatch.opt ; then \ $(MAKE) install-byte;fi @if test ! -x spatch -a -x spatch.opt ; then \ @@ -331,7 +334,8 @@ uninstall: rm -f $(DESTDIR)$(MANDIR)/man1/spatch.1 version: - @echo $(VERSION) + @echo "spatch $(VERSION)" + @echo "coccicheck $(CCVERSION)" ############################################################################## @@ -339,6 +343,7 @@ version: ############################################################################## PACKAGE=coccinelle-$(VERSION) +CCPACKAGE=coccicheck-$(CCVERSION) BINSRC=spatch env.sh env.csh standard.h standard.iso \ *.txt \ @@ -382,21 +387,26 @@ OCAMLVERSION=$(shell ocaml -version |perl -p -e 's/.*version (.*)/$$1/;') # the scripts/licensify has been run at least once. # For the 'make bintar' I can do it from my original repo. +prepackage: + cvs up -CdP + $(MAKE) distclean + $(MAKE) licensify package: - make srctar + $(MAKE) srctar ./configure --without-python - make docs - make bintar - make bytecodetar - make staticbintar + $(MAKE) docs + $(MAKE) bintar + $(MAKE) bytecodetar + $(MAKE) staticbintar + $(MAKE) coccicheck # I currently pre-generate the parser so the user does not have to # install menhir on his machine. We could also do a few cleanups. # You may have first to do a 'make licensify'. # -# update: make docs generates pdf but also some ugly .log files, so +# update: make docs generates pdf but also some ugly .log files, so # make clean is there to remove them while not removing the pdf # (only distclean remove the pdfs). srctar: @@ -430,18 +440,26 @@ bytecodetar: all cd $(TMP); tar cvfz $(PACKAGE)-bin-bytecode-$(OCAMLVERSION).tgz --exclude-vcs $(BINSRC2) rm -f $(TMP)/$(PACKAGE) -clean:: - rm -f $(PACKAGE) - rm -f $(PACKAGE)-bin-x86.tgz - rm -f $(PACKAGE)-bin-x86-static.tgz - rm -f $(PACKAGE)-bin-bytecode-$(OCAMLVERSION).tgz - +coccicheck: + cp -a `pwd`/scripts/coccicheck $(TMP)/$(CCPACKAGE) + tar cvfz $(TMP)/$(CCPACKAGE).tgz -C $(TMP) --exclude-vcs $(CCPACKAGE) + rm -rf $(TMP)/$(CCPACKAGE) +clean:: + rm -f $(TMP)/$(PACKAGE).tgz + rm -f $(TMP)/$(PACKAGE)-bin-x86.tgz + rm -f $(TMP)/$(PACKAGE)-bin-x86-static.tgz + rm -f $(TMP)/$(PACKAGE)-bin-bytecode-$(OCAMLVERSION).tgz + rm -f $(TMP)/$(CCPACKAGE).tgz -TOLICENSIFY=ctl engine parsing_cocci python +# +# No need to licensify 'demos'. Because these is basic building blocks +# to use SmPL. +# +TOLICENSIFY=ctl engine globals parsing_cocci popl popl09 python scripts tools licensify: - ocaml tools/licensify.ml - set -e; for i in $(TOLICENSIFY); do cd $$i; ocaml ../tools/licensify.ml; cd ..; done + ocaml str.cma tools/licensify.ml + set -e; for i in $(TOLICENSIFY); do cd $$i; ocaml str.cma ../tools/licensify.ml; cd ..; done # When checking out the source from diku sometimes I have some "X in the future" # error messages. @@ -524,7 +542,7 @@ tags: otags -no-mli-tags -r . dependencygraph: - find -name "*.ml" |grep -v "scripts" | xargs ocamldep -I commons -I globals -I ctl -I parsing_cocci -I parsing_c -I engine -I extra > /tmp/dependfull.depend + find -name "*.ml" |grep -v "scripts" | xargs ocamldep -I commons -I globals -I ctl -I parsing_cocci -I parsing_c -I engine -I popl09 -I extra > /tmp/dependfull.depend ocamldot -lr /tmp/dependfull.depend > /tmp/dependfull.dot dot -Tps /tmp/dependfull.dot > /tmp/dependfull.ps ps2pdf /tmp/dependfull.ps /tmp/dependfull.pdf diff --git a/changes.txt b/changes.txt index 18ea1c6..263e735 100644 --- a/changes.txt +++ b/changes.txt @@ -1,5 +1,34 @@ -*- org -*- +* 0.1.11 + +** Language: +- Meta-identifier/function and constant could be filtered from SmPL by + regular expressions using the "~=" and "!~=" operators followed by + an OCaml regular expression (see man Str) in double quote. + +** Features: +- virtual rules, which can be referenced in depends, and set and unset + using the command-line options -D and -U +- coccicheck: a framework to check a series of SmPL files on a project + see scripts/coccicheck for more information + +** Bugfix: +- bind position variables to the correct starting position in the case of a + complex statement such as an if or while. Thanks to Derek Jones for + pointing out the problem. +- checking for non mentioned case lines in switch should be unchecked. +- space should be printed after sizeof when there are no parentheses around + the argument. Thanks to Daniel Walker for pointing out the problem. +- avoid introducing sharing in propagating ! over () in treatment of isos +- save_excursion has to handle and rethrow exceptions +- eliminate unnecessary consideration of CVS strings. Thanks to David + Young for pointing out the problem. +- completely new treatment of statement metavariables +- ++ for multiple additions +- better type checking for macro definitions +- drop regression testing in -parse_c + * 0.1.10 ** Language: diff --git a/cocci.ml b/cocci.ml index 1688b84..b832b24 100644 --- a/cocci.ml +++ b/cocci.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Common @@ -109,7 +109,7 @@ let ctls_of_ast2 ast (ua,fua,fuas) pos = (function ast -> function (ua,(fua,(fuas,pos))) -> List.combine (if !Flag_cocci.popl - then failwith "no popl here" (* Popl.popl ast *) + then Popl.popl ast else Asttoctl2.asttoctl ast (ua,fua,fuas) pos) (Asttomember.asttomember ast ua)) ast (List.combine ua (List.combine fua (List.combine fuas pos))) @@ -152,7 +152,7 @@ let show_or_not_cocci a b = let show_or_not_diff2 cfile outfile show_only_minus = if !Flag_cocci.show_diff then begin - match Common.fst(Compare_c.compare_default cfile outfile) with + match Common.fst(Compare_c.compare_to_original cfile outfile) with Compare_c.Correct -> () (* diff only in spacing, etc *) | _ -> (* may need --strip-trailing-cr under windows *) @@ -510,26 +510,28 @@ let (includes_to_parse: +> List.concat +> Common.uniq -let rec interpret_dependencies local global = function - Ast_cocci.Dep s -> List.mem s local +let rec interpret_dependencies local global virt = function + Ast_cocci.Dep s -> + (try List.assoc s virt with Not_found -> List.mem s local) | Ast_cocci.AntiDep s -> (if !Flag_ctl.steps != None then failwith "steps and ! dependency incompatible"); - not (List.mem s local) - | Ast_cocci.EverDep s -> List.mem s global + (try not(List.assoc s virt) with Not_found -> not (List.mem s local)) + | Ast_cocci.EverDep s -> + (try List.assoc s virt with Not_found -> List.mem s global) | Ast_cocci.NeverDep s -> (if !Flag_ctl.steps != None then failwith "steps and ! dependency incompatible"); - not (List.mem s global) + (try not(List.assoc s virt) with Not_found -> not (List.mem s global)) | Ast_cocci.AndDep(s1,s2) -> - (interpret_dependencies local global s1) && - (interpret_dependencies local global s2) + (interpret_dependencies local global virt s1) && + (interpret_dependencies local global virt s2) | Ast_cocci.OrDep(s1,s2) -> - (interpret_dependencies local global s1) or - (interpret_dependencies local global s2) + (interpret_dependencies local global virt s1) or + (interpret_dependencies local global virt s2) | Ast_cocci.NoDep -> true -let rec print_dependencies str local global dep = +let rec print_dependencies str local global virt dep = if !Flag_cocci.show_dependencies then begin @@ -537,23 +539,23 @@ let rec print_dependencies str local global dep = let seen = ref [] in let rec loop = function Ast_cocci.Dep s | Ast_cocci.AntiDep s -> - if not (List.mem s !seen) - then - begin - if List.mem s local - then pr2 (s^" satisfied") - else pr2 (s^" not satisfied"); - seen := s :: !seen - end + if not (List.mem s !seen) + then + begin + if try List.assoc s virt with Not_found -> List.mem s local + then pr2 (s^" satisfied") + else pr2 (s^" not satisfied"); + seen := s :: !seen + end | Ast_cocci.EverDep s | Ast_cocci.NeverDep s -> - if not (List.mem s !seen) - then - begin - if List.mem s global - then pr2 (s^" satisfied") - else pr2 (s^" not satisfied"); - seen := s :: !seen - end + if not (List.mem s !seen) + then + begin + if try List.assoc s virt with Not_found -> List.mem s global + then pr2 (s^" satisfied") + else pr2 (s^" not satisfied"); + seen := s :: !seen + end | Ast_cocci.AndDep(s1,s2) -> loop s1; loop s2 @@ -563,9 +565,7 @@ let rec print_dependencies str local global dep = | Ast_cocci.NoDep -> () in loop dep end - - - + (* --------------------------------------------------------------------- *) (* #include relative position in the file *) (* --------------------------------------------------------------------- *) @@ -701,7 +701,8 @@ type toplevel_cocci_info = | FinalScriptRuleCocciInfo of toplevel_cocci_info_script_rule | CocciRuleCocciInfo of toplevel_cocci_info_cocci_rule -type cocci_info = toplevel_cocci_info list * string list list (* tokens *) +type cocci_info = toplevel_cocci_info list * string list list (* tokens *) * + (string * bool) list (* matched and unmatched virtual rules *) type kind_file = Header | Source type file_info = { @@ -752,7 +753,7 @@ let gen_pdf_graph () = (* --------------------------------------------------------------------- *) let prepare_cocci ctls free_var_lists negated_pos_lists - (ua,fua,fuas) positions_list metavars astcocci = + (ua,fua,fuas) positions_list metavars astcocci = let gathered = Common.index_list_1 (zip (zip (zip (zip (zip (zip (zip (zip ctls metavars) astcocci) @@ -850,7 +851,8 @@ let build_info_program cprogram env = let (fullstr, tokens) = parseinfo in let flow = - ast_to_flow_with_error_messages c +> Common.map_option (fun flow -> + ast_to_flow_with_error_messages c +> + Common.map_option (fun flow -> let flow = Ast_to_flow.annotate_loop_nodes flow in (* remove the fake nodes for julia *) @@ -912,7 +914,8 @@ let rebuild_info_c_and_headers ccs isexp = ); ccs +> List.map (fun c_or_h -> { c_or_h with - asts = rebuild_info_program c_or_h.asts c_or_h.full_fname isexp } + asts = + rebuild_info_program c_or_h.asts c_or_h.full_fname isexp } ) @@ -1049,16 +1052,16 @@ let merge_env new_e old_e = old_e @ (List.rev ext) let apply_python_rule r cache newes e rules_that_have_matched - rules_that_have_ever_matched = - Common.profile_code "python" (fun () -> + rules_that_have_ever_matched virtual_methods = + Common.profile_code "python" (fun () -> show_or_not_scr_rule_name r.scr_ruleid; if not(interpret_dependencies rules_that_have_matched - !rules_that_have_ever_matched r.scr_dependencies) + !rules_that_have_ever_matched virtual_methods r.scr_dependencies) then begin print_dependencies "dependencies for script not satisfied:" rules_that_have_matched - !rules_that_have_ever_matched r.scr_dependencies; + !rules_that_have_ever_matched virtual_methods r.scr_dependencies; show_or_not_binding "in environment" e; (cache, (e, rules_that_have_matched)::newes) end @@ -1075,12 +1078,22 @@ let apply_python_rule r cache newes e rules_that_have_matched e in let new_cache = if List.mem relevant_bindings cache - then cache + then + begin + print_dependencies + "dependencies for script satisfied, but cached:" + rules_that_have_matched + !rules_that_have_ever_matched virtual_methods + r.scr_dependencies; + show_or_not_binding "in" e; + cache + end else begin print_dependencies "dependencies for script satisfied:" rules_that_have_matched - !rules_that_have_ever_matched r.scr_dependencies; + !rules_that_have_ever_matched virtual_methods + r.scr_dependencies; show_or_not_binding "in" e; Pycocci.build_classes (List.map (function (x,y) -> x) e); Pycocci.construct_variables mv e; @@ -1102,7 +1115,7 @@ let apply_python_rule r cache newes e rules_that_have_matched (cache, merge_env [(e, rules_that_have_matched)] newes)) end) -let rec apply_cocci_rule r rules_that_have_ever_matched es +let rec apply_cocci_rule r rules_that_have_ever_matched virtual_methods es (ccs:file_info list ref) = Common.profile_code r.rulename (fun () -> show_or_not_rule_name r.ast_rule r.ruleid; @@ -1117,13 +1130,14 @@ let rec apply_cocci_rule r rules_that_have_ever_matched es (function (cache,newes) -> function ((e,rules_that_have_matched),relevant_bindings) -> if not(interpret_dependencies rules_that_have_matched - !rules_that_have_ever_matched r.dependencies) + !rules_that_have_ever_matched virtual_methods + r.dependencies) then begin print_dependencies ("dependencies for rule "^r.rulename^" not satisfied:") rules_that_have_matched - !rules_that_have_ever_matched r.dependencies; + !rules_that_have_ever_matched virtual_methods r.dependencies; show_or_not_binding "in environment" e; (cache, merge_env @@ -1139,7 +1153,8 @@ let rec apply_cocci_rule r rules_that_have_ever_matched es print_dependencies ("dependencies for rule "^r.rulename^" satisfied:") rules_that_have_matched - !rules_that_have_ever_matched r.dependencies; + !rules_that_have_ever_matched virtual_methods + r.dependencies; show_or_not_binding "in" e; show_or_not_binding "relevant in" relevant_bindings; @@ -1376,7 +1391,7 @@ and process_a_ctl_a_env_a_toplevel a b c f= (fun () -> process_a_ctl_a_env_a_toplevel2 a b c f) -let rec bigloop2 rs (ccs: file_info list) = +let rec bigloop2 rs virtual_methods (ccs: file_info list) = let es = ref [(Ast_c.emptyMetavarsBinding,[])] in let ccs = ref ccs in let rules_that_have_ever_matched = ref [] in @@ -1408,7 +1423,7 @@ let rec bigloop2 rs (ccs: file_info list) = match r.language with "python" -> apply_python_rule r cache newes e rules_that_have_matched - rules_that_have_ever_matched + rules_that_have_ever_matched virtual_methods | "test" -> concat_headers_and_c !ccs +> List.iter (fun (c,_) -> if c.flow <> None @@ -1423,7 +1438,8 @@ let rec bigloop2 rs (ccs: file_info list) = es := newes; | CocciRuleCocciInfo r -> - apply_cocci_rule r rules_that_have_ever_matched es ccs); + apply_cocci_rule r rules_that_have_ever_matched virtual_methods + es ccs); if !Flag.sgrep_mode2 then begin @@ -1459,7 +1475,8 @@ let initial_final_bigloop2 ty rebuild r = "python" -> (* include_match makes no sense in an initial or final rule, although er have no way to prevent it *) - let _ = apply_python_rule r [] [] [] [] (ref []) in () + let _ = apply_python_rule r [] [] [] [] (ref []) [] in + () | _ -> Printf.printf "Unknown language for initial/final script: %s\n" r.language @@ -1486,7 +1503,7 @@ let pre_engine2 (coccifile, isofile) = (* useful opti when use -dir *) let (metavars,astcocci,free_var_lists,negated_pos_lists,used_after_lists, - positions_lists,toks,_) = + positions_lists,toks,_,virt) = sp_of_file coccifile isofile in let ctls = ctls_of_ast astcocci used_after_lists positions_lists in @@ -1513,12 +1530,13 @@ let pre_engine2 (coccifile, isofile) = r.language::languages | _ -> languages) [] cocci_infos in - (cocci_infos,toks) + + (cocci_infos,toks,virt) let pre_engine a = Common.profile_code "pre_engine" (fun () -> pre_engine2 a) -let full_engine2 (cocci_infos,toks) cfiles = +let full_engine2 (cocci_infos,toks,virt) cfiles = show_or_not_cfiles cfiles; @@ -1546,7 +1564,7 @@ let full_engine2 (cocci_infos,toks) cfiles = let c_infos = prepare_c cfiles choose_includes in (* ! the big loop ! *) - let c_infos' = bigloop cocci_infos c_infos in + let c_infos' = bigloop cocci_infos virt c_infos in if !Flag.show_misc then Common.pr_xxxxxxxxxxxxxxxxx (); if !Flag.show_misc then pr "Finished"; @@ -1579,7 +1597,7 @@ let full_engine a b = Common.profile_code "full_engine" (fun () -> let res = full_engine2 a b in (*Gc.print_stat stderr; *)res) -let post_engine2 (cocci_infos,_) = +let post_engine2 (cocci_infos,_,_) = let _ = List.fold_left (function languages -> diff --git a/cocci.mli b/cocci.mli index 9056f62..50fce27 100644 --- a/cocci.mli +++ b/cocci.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + open Common (* full_engine takes (coccifile, isofile) and cfiles in parameters and @@ -39,5 +61,6 @@ val sp_of_file : Ast_cocci.meta_name list list list) * Ast_cocci.meta_name list list list * string list list * - string option + string list option * + (string * bool) list diff --git a/commitmsg b/commitmsg dissimilarity index 99% index d59c5ae..09dc916 100644 --- a/commitmsg +++ b/commitmsg @@ -1,29 +1,3 @@ -Release coccinelle-0.1.10 - -** Language: - - declarations allowed in switch, suggested by Derek M. Jones - -** Features: - - use interval timer for timeouts. Thanks to Derek M. Jones for the - implementation. - - more flexible env.sh, thanks to Derek Jones. - - faster Python invocation - - simplify unparsing in the sgrep case - -** Bugfix: - - for glimpse there is no point to create a pattern containing a numeric - constant because glimpse doesn't index them - - add spaces after commas in function calls and function headers - - made python integration more like the ubuntu version - http://patches.ubuntu.com/by-release/extracted/debian/c/coccinelle/0.1.5dbs-2/01-system-pycaml - this fixes some memory management problems with None, True, and False - - correct labels associated with a switch in the CFG so that a statement - metavariable can match a switch. Thanks to Derek Jones for pointing out - the problem. - - keep switch pattern within switch body. Thanks to Derek Jones for - pointing out the problem. - - Allow expanded tokens to be stored in metavariables, as long as they are - not removed. But this does currently allow them in + code, which will - produce the expansion. Thanks to Ali-Erdem Ozcan for pointing out the - problem. - - improved adjustment of spacing when code removed at the beginning of a line +Release coccinelle-0.1.11rc1 + +Release Candidate 1 for coccinelle-0.1.11 diff --git a/commitmsg~ b/commitmsg~ new file mode 100644 index 0000000..982a878 --- /dev/null +++ b/commitmsg~ @@ -0,0 +1,3 @@ +Release coccinelle-0.1.9-rc1 + +Release Candidate 1 for coccinelle-0.1.9 diff --git a/commons/common.ml b/commons/common.ml index 441a9b2..2786f23 100644 --- a/commons/common.ml +++ b/commons/common.ml @@ -1259,7 +1259,7 @@ type 'a mylazy = (unit -> 'a) (* a la emacs *) let save_excursion reference f = let old = !reference in - let res = f() in + let res = try f() with e -> reference := old; raise e in reference := old; res @@ -5515,7 +5515,6 @@ let full_charpos_to_pos_large2 = fun filename -> let line = ref 0 in let rec full_charpos_to_pos_aux () = - try let s = (input_line chan) in incr line; @@ -5526,19 +5525,18 @@ let full_charpos_to_pos_large2 = fun filename -> arr2.{!charpos + i} <- i; done; charpos := !charpos + slength s + 1; - full_charpos_to_pos_aux(); - - with End_of_file -> - for i = !charpos to (* old: Array.length arr *) - Bigarray.Array1.dim arr1 - 1 do - (* old: arr.(i) <- (!line, 0); *) - arr1.{i} <- !line; - arr2.{i} <- 0; - done; - (); - in + full_charpos_to_pos_aux() in begin - full_charpos_to_pos_aux (); + (try + full_charpos_to_pos_aux (); + with End_of_file -> + for i = !charpos to (* old: Array.length arr *) + Bigarray.Array1.dim arr1 - 1 do + (* old: arr.(i) <- (!line, 0); *) + arr1.{i} <- !line; + arr2.{i} <- 0; + done; + ()); close_in chan; (fun i -> arr1.{i}, arr2.{i}) end diff --git a/ctl/Makefile b/ctl/Makefile index 57c6dc4..77e1919 100644 --- a/ctl/Makefile +++ b/ctl/Makefile @@ -1,19 +1,19 @@ # Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix # This file is part of Coccinelle. -# +# # Coccinelle is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, according to version 2 of the License. -# +# # Coccinelle is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with Coccinelle. If not, see . -# +# # The authors reserve the right to distribute this or future versions of # Coccinelle under other licenses. diff --git a/ctl/ast_ctl.ml b/ctl/ast_ctl.ml index deacee2..e2417c8 100644 --- a/ctl/ast_ctl.ml +++ b/ctl/ast_ctl.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) diff --git a/ctl/ctl_engine.ml b/ctl/ctl_engine.ml index 34a62eb..b202ad8 100644 --- a/ctl/ctl_engine.ml +++ b/ctl/ctl_engine.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (*external c_counter : unit -> int = "c_counter"*) diff --git a/ctl/ctl_engine.mli b/ctl/ctl_engine.mli index ba21a17..eae3732 100644 --- a/ctl/ctl_engine.mli +++ b/ctl/ctl_engine.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + open Ast_ctl module type SUBST = diff --git a/ctl/flag_ctl.ml b/ctl/flag_ctl.ml dissimilarity index 68% index 5c26e23..87b584e 100644 --- a/ctl/flag_ctl.ml +++ b/ctl/flag_ctl.ml @@ -1,42 +1,42 @@ -(* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) - - -(* option -verbose_ctl_engine *) -let verbose_ctl_engine = ref false - -(* cheap partial matches using assttomember *) -let verbose_match = ref false - -let partial_match = ref false - -let poswits_only = ref false - -let loop_in_src_code = ref false - -let bench = ref 0 - -let steps = ref (None : int option) - -let graphical_trace = ref false -let gt_without_label = ref false - -let checking_reachability = ref false +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* option -verbose_ctl_engine *) +let verbose_ctl_engine = ref false + +(* cheap partial matches using assttomember *) +let verbose_match = ref false + +let partial_match = ref false + +let poswits_only = ref false + +let loop_in_src_code = ref false + +let bench = ref 0 + +let steps = ref (None : int option) + +let graphical_trace = ref false +let gt_without_label = ref false + +let checking_reachability = ref false diff --git a/ctl/pretty_print_ctl.ml b/ctl/pretty_print_ctl.ml index 4c898d7..75dfa88 100644 --- a/ctl/pretty_print_ctl.ml +++ b/ctl/pretty_print_ctl.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Common diff --git a/ctl/pretty_print_ctl.mli b/ctl/pretty_print_ctl.mli index a7c57fc..ed74fd0 100644 --- a/ctl/pretty_print_ctl.mli +++ b/ctl/pretty_print_ctl.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val pp_ctl: ('pred -> unit) * ('mvar -> unit) -> bool (* inline_let_def *) -> diff --git a/ctl/test_ctl.ml b/ctl/test_ctl.ml index 6ae2419..56630c1 100644 --- a/ctl/test_ctl.ml +++ b/ctl/test_ctl.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) diff --git a/ctl/wrapper_ctl.ml b/ctl/wrapper_ctl.ml index b970775..45bdd58 100644 --- a/ctl/wrapper_ctl.ml +++ b/ctl/wrapper_ctl.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* ********************************************************************** diff --git a/ctl/wrapper_ctl.mli b/ctl/wrapper_ctl.mli index 62319da..0d078d3 100644 --- a/ctl/wrapper_ctl.mli +++ b/ctl/wrapper_ctl.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + type info = int type ('pred, 'mvar) wrapped_ctl = diff --git a/demos/orgmode.c b/demos/orgmode.c new file mode 100644 index 0000000..8db466c --- /dev/null +++ b/demos/orgmode.c @@ -0,0 +1,3 @@ +int main() { + f(12); +} diff --git a/demos/orgmode.cocci b/demos/orgmode.cocci new file mode 100644 index 0000000..fa42997 --- /dev/null +++ b/demos/orgmode.cocci @@ -0,0 +1,26 @@ +@r@ +position p1, p2; +identifier f; +expression E; +@@ + +f@p1(E@p2) + +@ script:python @ +p1 << r.p1; +p2 << r.p2; +f << r.f; +@@ + +cocci.print_main (p1) +cocci.print_sec (p2) + +print "" + +cocci.print_main (p1, "foo") +cocci.print_sec (p2, "foo") + +print "" + +cocci.print_main (p1, "foo", "ovl-face3") +cocci.print_sec (p2, "foo", "ovl-face4") diff --git a/demos/regexp.c b/demos/regexp.c new file mode 100644 index 0000000..012011f --- /dev/null +++ b/demos/regexp.c @@ -0,0 +1,5 @@ +int foo () { return 0; } +int bar () { return 0; } +int foobar () { return 0; } +int barfoobar () { return 0; } +int barfoo () { return 0; } diff --git a/demos/regexp.cocci b/demos/regexp.cocci new file mode 100644 index 0000000..af56a16 --- /dev/null +++ b/demos/regexp.cocci @@ -0,0 +1,74 @@ +@anyid@ +type t; +identifier id; +@@ + +t id () { +... +} + +@script:python@ +x << anyid.id; +@@ + +print "Identifier: %s" % x + +@contains@ +type t; +identifier foo ~= ".*foo"; +@@ + +t foo () { +... +} + +@script:python@ +x << contains.foo; +@@ + +print "Contains foo: %s" % x + +@nocontain@ +type t; +identifier foo ~!= ".*foo"; +@@ + +t foo () { +... +} + +@script:python@ +x << nocontain.foo; +@@ + +print "Does not contain foo: %s" % x + +@endsby@ +type t; +identifier foo ~= ".*foo$"; +@@ + +t foo () { +... +} + +@script:python@ +x << endsby.foo; +@@ + +print "Ends by foo: %s" % x + +@beginsby@ +type t; +identifier foo ~= "^foo"; +@@ + +t foo () { +... +} + +@script:python@ +x << beginsby.foo; +@@ + +print "Begins by foo: %s" % x diff --git a/demos/spp/Makefile b/demos/spp/Makefile new file mode 100644 index 0000000..2eba01b --- /dev/null +++ b/demos/spp/Makefile @@ -0,0 +1,15 @@ +#CFLAGS=-sp_file test.cocci -no_show_diff +CFLAGS=-sp_file test.cocci +#CFLAGS=-sp_file testpy.cocci +CC=../../tools/spp +LD=cat + +all: clean test + +test: test.o test2.o + +test.o: test.c test.h +test2.o: test2.c + +clean: + rm -f test.o test.c.i test2.o test2.c.i diff --git a/demos/spp/test b/demos/spp/test new file mode 100644 index 0000000..c01c522 --- /dev/null +++ b/demos/spp/test @@ -0,0 +1,21 @@ +--- test.c.i 2009-05-18 14:00:32.000000000 +0200 ++++ /tmp/cocci-output-25285-b49c53-test.c.i 2009-05-18 14:00:33.000000000 +0200 +@@ -11,7 +11,7 @@ int main(void) { + + + +- x = 2; ++ x = 2 + 1; + + return x; + } +--- test2.c.i 2009-05-18 14:00:33.000000000 +0200 ++++ /tmp/cocci-output-25300-b31556-test2.c.i 2009-05-18 14:00:33.000000000 +0200 +@@ -4,6 +4,6 @@ + # 1 "test2.c" + int main() { + int foo; +- foo = 1000; ++ foo = 1000 + 1; + return 0; + } diff --git a/demos/spp/test.c b/demos/spp/test.c new file mode 100644 index 0000000..0784f13 --- /dev/null +++ b/demos/spp/test.c @@ -0,0 +1,12 @@ +#include "test.h" + +int main(void) { + int x; + +#ifdef __FOO__ + x = 1; +#else + x = 2; +#endif + return x; +} diff --git a/demos/spp/test.cocci b/demos/spp/test.cocci new file mode 100644 index 0000000..7c3dbf1 --- /dev/null +++ b/demos/spp/test.cocci @@ -0,0 +1,7 @@ +@@ +identifier i; +constant C; +@@ + +-i = C; ++i = C + 1; diff --git a/demos/spp/test.h b/demos/spp/test.h new file mode 100644 index 0000000..803cd34 --- /dev/null +++ b/demos/spp/test.h @@ -0,0 +1,6 @@ + +#ifdef __BAR__ + #define __FOO__ +#else + #undef __FOO__ +#endif diff --git a/demos/spp/test2.c b/demos/spp/test2.c new file mode 100644 index 0000000..6d7559a --- /dev/null +++ b/demos/spp/test2.c @@ -0,0 +1,5 @@ +int main() { + int foo; + foo = 1000; + return 0; +} diff --git a/demos/spp/testpy.cocci b/demos/spp/testpy.cocci new file mode 100644 index 0000000..e13665b --- /dev/null +++ b/demos/spp/testpy.cocci @@ -0,0 +1,12 @@ +@r@ +identifier i; +constant C; +@@ + +i = C; + +@script:python@ +i << r.i; +@@ + +print i diff --git a/demos/virt.c b/demos/virt.c new file mode 100644 index 0000000..ca2ac4a --- /dev/null +++ b/demos/virt.c @@ -0,0 +1 @@ +int main () {} diff --git a/demos/virt.cocci b/demos/virt.cocci new file mode 100644 index 0000000..bd68281 --- /dev/null +++ b/demos/virt.cocci @@ -0,0 +1,27 @@ +// Illustrate the use of virtual rules +// +// Confidence: High +// Copyright: (C) Gilles Muller, Julia Lawall, INRIA, DIKU. GPLv2. +// Options: some permutation of -D/U p1 -D/U p2 + +virtual p1, p2 + +@script:python depends on p1@ +@@ + +print "p1" + +@script:python depends on p2@ +@@ + +print "p2" + +@script:python depends on p1 && !p2@ +@@ + +print "only p1" + +@script:python depends on p2 && !p1@ +@@ + +print "only p2" diff --git a/docs/manual/cocci_syntax.tex b/docs/manual/cocci_syntax.tex index 441c21f..773006a 100644 --- a/docs/manual/cocci_syntax.tex +++ b/docs/manual/cocci_syntax.tex @@ -17,10 +17,10 @@ possible C-language constants. % \ifhevea A PDF version of this documentation is available at -\url{http://www.emn.fr/x-info/coccinelle/docs/main_grammar.pdf}. +\url{http://coccinelle.lip6.fr/docs/main_grammar.pdf}. \else A HTML version of this documentation is available online at -\url{http://www.emn.fr/x-info/coccinelle/docs/main_grammar.html}. +\url{http://coccinelle.lip6.fr/docs/main_grammar.html}. \fi \section{Program} @@ -143,6 +143,7 @@ constrained by its type. \begin{grammar} \RULE{\rt{metadecl}} \CASE{fresh identifier \NT{ids} ;} + \CASE{identifier \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_regexp}\mth{)} ;} \CASE{identifier \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_not\_eq}\mth{)} ;} \CASE{parameter \opt{list} \NT{ids} ;} \CASE{parameter list [ \NT{id} ] \NT{ids} ;} @@ -151,8 +152,10 @@ constrained by its type. \CASE{typedef \NT{ids} ;} \CASE{declarer name \NT{ids} ;} % \CASE{\opt{local} function \NT{pmid\_with\_not\_eq\_list} ;} + \CASE{declarer \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_regexp}\mth{)} ;} \CASE{declarer \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_not\_eq}\mth{)} ;} \CASE{iterator name \NT{ids} ;} + \CASE{iterator \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_regexp}\mth{)} ;} \CASE{iterator \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_not\_eq}\mth{)} ;} % \CASE{error \NT{pmid\_with\_not\_eq\_list} ; } \CASE{\opt{local} idexpression \opt{\NT{ctype}} \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_not\_eq}\mth{)} ;} @@ -184,6 +187,9 @@ constrained by its type. \RULE{\rt{mid}} \CASE{\T{rulename\_id}.\T{id}} + \RULE{\rt{pmid\_with\_regexp}} + \CASE{\NT{pmid} \~{}= \NT{regexp}} + \RULE{\rt{pmid\_with\_not\_eq}} \CASE{\NT{pmid} \OPT{!= \T{id}}} \CASE{\NT{pmid} \OPT{!= \ttlb~\NT{COMMA\_LIST}\mth{(}\T{id}\mth{)} \ttrb}} @@ -786,6 +792,9 @@ in a concise way. \RULE{\rt{pathToIsoFile}} \CASE{<.*>} + + \RULE{\rt{regexp}} + \CASE{"\any{[\^{}"]}"} \end{grammar} diff --git a/docs/manual/examples.tex b/docs/manual/examples.tex index 95da6e9..c9b715f 100644 --- a/docs/manual/examples.tex +++ b/docs/manual/examples.tex @@ -415,8 +415,8 @@ p1 << r.p1; p2 << r.p2; @@@M -cocci.print_main("",p1) -cocci.print_sec("return",p2) +cocci.print_main(p1) +cocci.print_sec(p2,"return") \end{lstlisting} \end{tabular}\\ @@ -427,6 +427,94 @@ every matched position should be printed. Any metavariable could be inherited in the Python code. However, accessible fields are not currently equally supported among them. +\newpage +\subsection{Filtering identifiers, declarers or iterators with regular expression} + +If you consider the following SmPL file which uses the regexp functionality to +filter the identifiers that contain, begin or end by \texttt{foo}, + +\begin{tabular}{c@{\hspace{2cm}}c} +\begin{lstlisting}[language=Cocci, name=Regexp] +@M@anyid@ +type t; +identifier id; +@@@M +t id () {...} + +@M@script:python@ +x << anyid.id; +@@@M +print "Identifier: %s" % x + +@M@contains@ +type t; +identifier foo ~= ".*foo"; +@@@M +t foo () {...} + +@M@script:python@ +x << contains.foo; +@@@M +print "Contains foo: %s" % x + +\end{lstlisting} +& +\begin{lstlisting}[language=Cocci,name=Regexp] +@M@endsby@ +type t; +identifier foo ~= ".*foo$"; +@@@M + +t foo () {...} + +@M@script:python@ +x << endsby.foo; +@@@M +print "Ends by foo: %s" % x + +@M@beginsby@ +type t; +identifier foo ~= "^foo"; +@@@M +t foo () {...} + +@M@script:python@ +x << beginsby.foo; +@@@M +print "Begins by foo: %s" % x +\end{lstlisting} +\end{tabular}\\ + +and the following C program, on the left, which defines the functions +\texttt{foo}, \texttt{bar}, \texttt{foobar}, \texttt{barfoobar} and +\texttt{barfoo}, you will get the result on the right. + +\begin{tabular}{c@{\hspace{2cm}}c} +\begin{lstlisting} +int foo () { return 0; } +int bar () { return 0; } +int foobar () { return 0; } +int barfoobar () { return 0; } +int barfoo () { return 0; } +\end{lstlisting} +& +\begin{lstlisting} +Identifier: foo +Identifier: bar +Identifier: foobar +Identifier: barfoobar +Identifier: barfoo +Contains foo: foo +Contains foo: foobar +Contains foo: barfoobar +Contains foo: barfoo +Ends by foo: foo +Ends by foo: barfoo +Begins by foo: foo +Begins by foo: foobar +\end{lstlisting} +\end{tabular} + % \begin{tabular}{ccc} % Before & Semantic patch & After \\ % \begin{minipage}[t]{.3\linewidth} @@ -447,7 +535,7 @@ accessible fields are not currently equally supported among them. %%% Local Variables: %%% mode: LaTeX -%%% TeX-master: "cocci_syntax" +%%% TeX-master: "main_grammar" %%% coding: latin-9 %%% TeX-PDF-mode: t %%% ispell-local-dictionary: "american" diff --git a/docs/manual/main.tex b/docs/manual/main.tex index 5f5f6d1..9d064e0 100644 --- a/docs/manual/main.tex +++ b/docs/manual/main.tex @@ -141,7 +141,7 @@ GNU Free Documentation License version 1.3. \section*{Availability} Coccinelle can be freely downloaded -from \verb+http://www.emn.fr/x-info/coccinelle+. +from \verb+http://coccinelle.lip6.fr/+. This website contains also additional information. diff --git a/docs/manual/main_grammar.pdf b/docs/manual/main_grammar.pdf index 45aef2573788c16dbf9a8b2d120ff50c0eef4aec..32905c5e93daa3879b2b195ea1c75ebfcd04fc72 100644 GIT binary patch delta 95298 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ɆK-3csc=`SWzOvvgNIEZUB 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 MLY+~JBkF1O^O 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 delta 84040 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 diff --git a/docs/manual/main_grammar.tex b/docs/manual/main_grammar.tex index b46185e..e44a168 100644 --- a/docs/manual/main_grammar.tex +++ b/docs/manual/main_grammar.tex @@ -28,7 +28,7 @@ \newcommand{\air}{\phantom{xxx}} \fi -\title{The SmPL Grammar (version 0.1.4)} +\title{The SmPL Grammar (version 0.1.11)} \author{Research group on Coccinelle} \date{\today} diff --git a/docs/manual/manual.pdf b/docs/manual/manual.pdf index 93a1122c4b6cb3b756bc2f03d7916351c558c6af..5c42bbb1cd1d327b02151c8b80e03701c67c3331 100644 GIT binary patch delta 130965 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 Lqe@zmLOq%<&+1Zf0*`w{m9dwuTJXo}hhWv8ha_ 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 KbU!X^t8_k(f^ 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 delta 119706 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 delta 7384 zcmaiYby$>L^esb|AR#h{bc0M6jWp6Bh@^BQB1jG;jWmc#cPcF{AR!H+bSfn+4I-EC zSNFTa?|JV0^}hS8v)4NNtbLw$PT~(D|7D_BE_?(yK@-AMC<_UKA*ccy9MpviS0zvZkAksXG9Vw zbbZ)Dnq|32g+_^aGcOFvzjky{!Ll1jDM&9#(YJ1aoxUq1PgwGyQf6|T+G*(b$exXD zl_)1oNO}OA`Akc%mZOIt;#77+RDNhG+TFX1GIqY*O^BJJ$&pN}+O1R~Ez*_iH4Na> zx*5+Ubk^`zjI;X*-a~1(#N}M(h@+<^71l*EcH;-w@S9SLHV##~jn;f{W#2iEcXDI#Z_k`9_E@eoLx{HKe zR=*?gsK)xC5u_w_Qb^?JYK;GUFM{)Nh-3eEvAsVrwpLl~AmEi>eGLqK^c%D>*N6mJ{;! zRX*C=f1IWJ;IvU8Ebq;(HkmdUeYlXvN%M2qgZJS#n;}BFy8b6aLY1!u>0`yo`{(w2 zLSMOGEQjPqH3qzE}wvt?HTk~I>mxcJmjt$!Fu zZaLf^lP8au&Jpz@*WseKDL#&b=%R_C|6@jwRZ3^YxyA~6RnN6 z#QhD3yT<0-<@-PGNRWu9#0om{mTpB=msvY*lyH19lOuC5m1)W{QCReocT4@UBC^`M zXzClWWxvgGgrBP|U;Z`dL7SFToPRqZR{pZ`S?X*5Z)4gONfSJp_#Ft^g&P&h7v)<7 znvAx-nfqyiU_7*np*Ns*`?$(&-~kv{6i-8)^`)(dX=&U;0LkEeWt zd*!6YPUXkPrY;w@gyhPlN^DD|O85?cR)TfL0*}7z%#0p23rc-(Tj`~INSJ9>fz7kA z4Lu1Zng>OGnU_47wj591rb-SVvmP=%o|UFeYw@?MoHgG%P`6IoFN`pc16iAi9`1|J#Psp~A<+#JCV|)YtK6Z-307M5nFL2%Kf_mwW5Z~(VtrsrC4UEcYm=gDxI(0DlW^lOJ% z%=ngr9Fj$Kq-t_?4B}C^|E@M2dO2j3TpvaoHbD)BWotb>3Q0Yl$T^E1@Y5~i>aEI4 zs;D|v;!KD)M@Pt2_Hz0+eiDeZc)B2s$IYNWGZOln z!h>Ewcl(}A66vp_c6JRCHReJ+(BWyjYTnMT{W?*#*UohOm!FimvI;tHSH$e{O6Bc7 z-SYh_JKS*ZZPCHpWv*cDRY0%(1K>g z52F9F{$b{spcgYRRQVuj+-2Y#y7#-YmzwdGxbNOuKAX#!U1)tBhyn4UwZz}J= zKHB}7pA8P0ECkS`f2V4z8SxVT^tP#T<#AD+Z`g=z* zfu!>q6IPXenzq<8#XQfLUGjZm>j4)-X|#jQL7RtUOt;g7&ZyXIOpOPd4`yp?q*mr) zf!BjWq%}M%rul1UWlG|qZzCm*)wpC*qZx3mc2;0wH3-CS3j|rwfIfUJzeVQRJ(_d> z>#2t^c?KTq@+f1(&6@U07urken|jrk_(a@oJ3*?Xb*iKQd;kxI9He6DWbI}HWrLz& z=>L9$v4Q{lkqriirvL;10@!$4u|)4X-EU(NwiUPQ%rUk7Q56)AXe)173Pz>g(XM(8 zu`uEA{vK8+B&Ya@mqS_hh`aKEvN@=cJ-sOXnTY!8)_(o`OsoCH-}f7|w;^@t@@O7( zz!{;~DcX>#oOtccyP!S-7YyUuj~|7}WaA-(O)T-0#Q+ywU3BKwB0jdK1Mg!z(|x%c z`8_;TYqT>>N{qMlpln5ghvJIB;jREKO7d_Ll~@bCn+op(?mq!g;FA-?H!tHk3NfIM z#XIhzNg9H<)NkJFCJrUAp^TtJ2M9BY-8m4AWuHsMIhe!#gvp_k{It`d`4!W)307Y*WlK^7Z(Gilw3_9aKvr ztun)_M+AUkdvE0-!^bPD64;aeI7YF_(dn(7;`tz~%?U^~g9=ObgJ`1drzsdM9{cy= z&||&MxL}tLpDCz-H8`8rpDQkQ&f%ahQ&8^HZ7S1Un_&vP=Cw~67_k5qb-)^IkK`R0 zSMAP*jx?S|1Kpuw0c3ZgC`qSl;S=$MLz;x)gDlKXB0{YGOQOmHObmhSs3Ie6YFaRWT-5B|C?6zur^k4B3pwTx?e1msBy zJb}~n_IkJi=AGS(MFV=N=bF*xq{2rf(6}kf!@5aT8F${*J1SHsZSTprc_crD2T$7; zbe-;6U>`N6w%XCczlocaHMw1Vde(DVei^mAkorDLFy74kaLLHos@fCeC|3LHvHE+v z&FYNSL_6K2rHu5^x%Ij6oexeAO5EKgzZ`E8Oob4_=QrGslXv0DQ`5`35`Fxgcj#Eg zhdP^L#SPjo(bmF~muw*6Zi zchyphgpWp-oB9pPHmPN-swi|{7U+l&_kS~WN`K?I_D8^d=i|UHpZB*_qJf&7>v<>H zrjK~AU!$fy{T0^Cx~82H7A?xw2#>Z3rHG%Ie)BVbykw!N`Tb?hAR0sdTM7>`qnLg8 zOtg+A-_CLlwiLn8>FrUMNmGzL>8{GpBu$&ij9EHAClfuH!tw$*6|F+0n)tbBytWE0WW9ruMhRBT ztAEfFymD4Q)k}9J94zYdYmECm-hU7$J{lY={8z#@=nSu>o`DP9~JRqQ4K^{S2G! zGr_jpf|DguI326)32M&og=Lu^llVPWg{b6#(@xP0bYA2N`6u zXX~Cr&*_MmDmU+Dxa-kS+9^88g7?}Z`vAxQu;!aC1&{*)G1GOK#zU!?;KS+FREVV~!(4aCO%iJMW z(Y)rXd+3l>(T)-<(X{1W2|txQ=!&urr`i!vkD}xRS2%iDEoL@% zZ+<4&hvQ^2Pc%%O%87Y4C{|Z4cY`Y{`IN};n%7mMb2)Rt%>k^s-b;FX<6Kf zYCBBKwkn3V8A@L*4~6jCjS*%O@oK1U+Sm;V_GNw1jz}mCYZD}GmGv#wlH4%DPH8f~ z|6Y-_rC(BQ_v48{$_rJ66xBW3FzE)D$GPO13zf$QEzT>#vxRh|^Fsw4lxmJ|Cykc$ zmR>K$kU31;*8d2vL!GtdsYLr_5OKt*ix=mm;+N+%|H>Fxlhcg|(aBRLz5@By z1K7UlU?`wv$@>XcVA?US-!(4T{3t9KKP7Zu{)a{?`S%}6L zE|~4)54(3CIi*KA9HD%xIEM-Wqd{*f2x^ous^f?^5}j!~0anz*P9df5dX!Y|Vm*kZ zvy^39?9`vK-`VFRz7J(^62rRwjETH?r(wr%E?X|Fe09F>+q7UUG9jkUU*)%^GtsaU z=))9?-eHVe3$*I6{;7t}qlKzTmYEbKjX8u_Li5S&ru2=Bm%tw%g1ZC%-k>jE`R4OH z!d|#aXgQ|tSxm%_0nS>9)FM?-HAo1GX-Vjz5XiCEOmZHG|7IPDmnDJa-UpUomJikD zkEAOZ`*lIn-=B>gCa8I_vOEqN@@@Mt=Sx~5i%kQ%<_c`DDghIk57P{WsvPZNyWC!pN!KJ$A{&!P+0Wzm7@dXKk}B(tyeb zK)+8tDK-itO=@S%tDMQ$AH8#Krd$pmw4B!Z3>vKG88uO<8^~jcpDvDy(L_0#`XP?1 zP*AWqm!ly?s%w0sJZ$s+6C3_Ok@~Q+7i*6TGBe6_q4lfuJYXZc_fIivlShfc4hf30)FU__gI!99BhJxd%=iFYwreE^ zKD25b2fjrbvud^#4&=27iVU)kf_35AKRJcVw|Z(Xo1@ZCLf-gEQOMkNo!#x46wia7 z`MJ8qV`lsBN?GiSHHJnG@ z*7B53>umQNRh2}fmNq5pRp)OGN2z~Jyt>pdaLk%*eNmknHc7&|Ru^bg?di6>LRP1u znfjaN#qQ*+=iZCw_!JNUXM)122Ou@4T*~Ka)+V~Mc1l<&ooFte?lRu`iE^4T-IS@K zpDre0nd)zT<+xNG6I)k&SMP6?aJ(%v!BRM5$WYuNZ{a>f z0R3IAXXel|7xPjj3~4{h-v)fwJ0sxS)qB?=UR!Qu@r>XNIm0swv4lXm>aF|pwI0B} zMkh}~+R8wxr$@T6&k~=HVe#&3^!`cNLjmYg1Q-B9#4-kQvKrDUh75pEpf>0U$lTe{ z(F|k>vT}az3UUNF**aN*T;T+iC|g{KiNe8w;TQz2A}|z&`40~4zt#msq9C}$7|2yhoP-!C z1ce&|qtP$~4i1b)L9gKuQ1HJOa>Wk@L!fXJu4)JrhPCdbD>uY!R3I0!HEBK754wy3IjzT zFgOaKa4_cDWEkduAwgbS2nGU!;d%=SzmoHBj(_TZ6@*_Sfy2SqC!?X)1R~(5YdFOJ zQW+!^`R{%IXWOAj31S2E(u6&?v}%Eg1Vh zT@6K}uPa1jkk`auz!3DmOZbmy3<7>lAO-`*#lgS`oYuao|J4bA#GMR-Ag-AP1_dK< zO$div$;J@_hajQ2IK)+x;chVk{LjT!jx&Hp^18bbSFXiPf<(a~xTQp*u6idHi3Jr(gvZ2sO7;ah6S4RbIJ~SAH{zuh6PX3?Gyt>JQ<60Gc z)l0a<7%&Qkn-Fv5RNPI+Kv7^^F;_9fziOHScnW}wd*NznMUH`iArNwIZaH;%^8W)zUQ96n diff --git a/docs/manual/python.tex b/docs/manual/python.tex new file mode 100644 index 0000000..ef9367d --- /dev/null +++ b/docs/manual/python.tex @@ -0,0 +1,49 @@ +\documentclass{article} +\usepackage{listings} + +\begin{document} +\section{Python API from SmPL} +\label{sec:python-api} + +\subsection{Output mode} +\label{sec:output} + +\begin{tabular}{lp{8cm}} +\texttt{-pyoutput coccilib.output.Console}& To output on the console \\ +\texttt{-pyoutput coccilib.output.Gtk} & To output on a Gtk frame \\ +\end{tabular} + +\subsection{Org mode} +\label{sec:orgmode} + +\begin{tabular}{lp{8cm}} +\texttt{cocci.print\_main}& For the main position \\ +\texttt{cocci.print\_sec} & For the secondary position \\ +\texttt{cocci.print\_secs}& For a set of secondary positions \\ +\end{tabular} + +\begin{lstlisting} +def print_main(p, msg="", color="ovl-face1") : + print "* TODO [[view:%s::face=%s::linb=%s::colb=%s::cole=%s][%s %s::%s]]" % (p[0].file,color,p[0].line,p[0].column,p[0].column_end,msg,p[0].file,p[0].line) + +def print_sec(p, msg="", color="ovl-face2") : + print "[[view:%s::face=%s::linb=%s::colb=%s::cole=%s][%s]]" % (p[0].file,color,p[0].line,p[0].column,p[0].column_end,msg) + +def print_secs(ps, msg="", color="ovl-face2") : + for i in ps: + print "[[view:%s::face=%s::linb=%s::colb=%s::cole=%s][%s]]" % (i.file,color,i.line,i.column,i.column_end,msg) +\end{lstlisting} + +%\subsection{Trac} +%\label{sec:trac} + + +\end{document} + +%%% Local Variables: +%%% mode: LaTeX +%%% TeX-master: "python" +%%% coding: latin-9 +%%% TeX-PDF-mode: t +%%% ispell-local-dictionary: "american" +%%% End: diff --git a/docs/manual/tips.tex b/docs/manual/tips.tex index b7f18d5..978fd30 100644 --- a/docs/manual/tips.tex +++ b/docs/manual/tips.tex @@ -40,7 +40,7 @@ Finally, it will generate \verb|bar = readb(foo)| as expected. %%% Local Variables: %%% mode: LaTeX -%%% TeX-master: "cocci_syntax" +%%% TeX-master: "main_grammar" %%% coding: latin-9 %%% TeX-PDF-mode: t %%% ispell-local-dictionary: "american" diff --git a/docs/spatch.1 b/docs/spatch.1 index 87e0ec8..aeab49e 100644 --- a/docs/spatch.1 +++ b/docs/spatch.1 @@ -1,6 +1,6 @@ .\" -*- nroff -*- .\" Please adjust this date whenever revising the manpage. -.TH SPATCH 1 "December 30, 2008" +.TH SPATCH 1 "September 18, 2009" .\" see http://www.fnal.gov/docs/products/ups/ReferenceManual/html/manpages.html .\" see http://www.linuxjournal.com/article/1158 @@ -48,7 +48,7 @@ transform multiple files at any number of code sites. .PP Further information about spatch is available at -\fBhttp://www.emn.fr/x-info/coccinelle\fP. +\fBhttp://coccinelle.lip6.fr/\fP. .SH OPTIONS Here is a summary of the most commonly used options: @@ -173,5 +173,5 @@ it under the terms of the GNU General Public License as published by the Free Software Foundation, according to version 2 of the License. .SH SEE ALSO -.BR patch (1). +\fIpatch\fP(1), \fIdiff\fP(1) diff --git a/engine/Makefile b/engine/Makefile index f90e6ad..4223798 100644 --- a/engine/Makefile +++ b/engine/Makefile @@ -1,19 +1,19 @@ # Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix # This file is part of Coccinelle. -# +# # Coccinelle is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, according to version 2 of the License. -# +# # Coccinelle is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with Coccinelle. If not, see . -# +# # The authors reserve the right to distribute this or future versions of # Coccinelle under other licenses. diff --git a/engine/asttoctl.ml b/engine/asttoctl.ml index 048b389..8191bfc 100644 --- a/engine/asttoctl.ml +++ b/engine/asttoctl.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* true = don't see all matched nodes, only modified ones *) diff --git a/engine/asttoctl.mli b/engine/asttoctl.mli index e1dcefa..7f60147 100644 --- a/engine/asttoctl.mli +++ b/engine/asttoctl.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + type cocci_predicate = Lib_engine.predicate * string Ast_ctl.modif type formula = (cocci_predicate,string, Wrapper_ctl.info) Ast_ctl.generic_ctl diff --git a/engine/asttoctl2.ml b/engine/asttoctl2.ml index d51e2cf..0db65d1 100644 --- a/engine/asttoctl2.ml +++ b/engine/asttoctl2.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* for MINUS and CONTEXT, pos is always None in this file *) @@ -172,8 +172,11 @@ let inlooppred = predmaker false (Lib_engine.InLoop, CTL.Control) let truepred = predmaker false (Lib_engine.TrueBranch, CTL.Control) let falsepred = predmaker false (Lib_engine.FalseBranch, CTL.Control) let fallpred = predmaker false (Lib_engine.FallThrough, CTL.Control) +let loopfallpred = predmaker false (Lib_engine.LoopFallThrough, CTL.Control) -let aftret label_var f = ctl_or (aftpred label_var) (exitpred label_var) +(*let aftret label_var = + ctl_or (aftpred label_var) + (ctl_or (loopfallpred label_var) (exitpred label_var))*) let letctr = ref 0 let get_let_ctr _ = @@ -216,7 +219,7 @@ let elim_opt = | (Ast.Dots(_,_,_,_)::Ast.OptStm(stm)::(Ast.Dots(_,_,_,_) as u)::urest, d0::s::d1::rest) | (Ast.Nest(_,_,_,_,_)::Ast.OptStm(stm)::(Ast.Dots(_,_,_,_) as u)::urest, - d0::s::d1::rest) -> + d0::s::d1::rest) -> (* why no case for nest as u? *) let l = Ast.get_line stm in let new_rest1 = stm :: (dots_list (u::urest) (d1::rest)) in let new_rest2 = dots_list urest rest in @@ -431,7 +434,7 @@ let contains_modif = let mcode r (_,_,kind,metapos) = match kind with Ast.MINUS(_,_,_,_) -> true - | Ast.PLUS -> failwith "not possible" + | Ast.PLUS _ -> failwith "not possible" | Ast.CONTEXT(_,info) -> not (info = Ast.NOTHING) in let do_nothing r k e = k e in let rule_elem r k re = @@ -1109,7 +1112,7 @@ let forwhile header body ((afvs,_,_,_) as aft) after [inlooppred None; recurse body Tail new_quantified new_mquantified (Some (lv,used)) (Some (lv,used)) None guard] in - let after_pred = fallpred None in + let after_pred = loopfallpred None in let or_cases after_branch = ctl_or body after_branch in let (header,wrapper) = if !used @@ -1165,36 +1168,53 @@ let svar_context_with_add_after stmt s label quantified d ast let label_var = (*fresh_label_var*) string2var "_lab" in let label_pred = CTL.Pred (Lib_engine.Label(label_var),CTL.Control) in - let prelabel_pred = - CTL.Pred (Lib_engine.PrefixLabel(label_var),CTL.Control) in + (*let prelabel_pred = + CTL.Pred (Lib_engine.PrefixLabel(label_var),CTL.Control) in*) let matcher d = make_match None guard (make_meta_rule_elem d fvinfo) in let full_metamatch = matcher d in let first_metamatch = matcher (match d with - Ast.CONTEXT(pos,Ast.BEFOREAFTER(bef,_)) -> - Ast.CONTEXT(pos,Ast.BEFORE(bef)) + Ast.CONTEXT(pos,Ast.BEFOREAFTER(bef,_,c)) -> + Ast.CONTEXT(pos,Ast.BEFORE(bef,c)) | Ast.CONTEXT(pos,_) -> Ast.CONTEXT(pos,Ast.NOTHING) - | Ast.MINUS(_,_,_,_) | Ast.PLUS -> failwith "not possible") in + | Ast.MINUS(_,_,_,_) | Ast.PLUS _ -> failwith "not possible") in +(* let middle_metamatch = matcher (match d with Ast.CONTEXT(pos,_) -> Ast.CONTEXT(pos,Ast.NOTHING) - | Ast.MINUS(_,_,_,_) | Ast.PLUS -> failwith "not possible") in + | Ast.MINUS(_,_,_,_) | Ast.PLUS _ -> failwith "not possible") in +*) let last_metamatch = matcher (match d with - Ast.CONTEXT(pos,Ast.BEFOREAFTER(_,aft)) -> - Ast.CONTEXT(pos,Ast.AFTER(aft)) + Ast.CONTEXT(pos,Ast.BEFOREAFTER(_,aft,c)) -> + Ast.CONTEXT(pos,Ast.AFTER(aft,c)) | Ast.CONTEXT(_,_) -> d - | Ast.MINUS(_,_,_,_) | Ast.PLUS -> failwith "not possible") in + | Ast.MINUS(_,_,_,_) | Ast.PLUS _ -> failwith "not possible") in +(* let rest_nodes = - ctl_and CTL.NONSTRICT middle_metamatch prelabel_pred in + ctl_and CTL.NONSTRICT middle_metamatch prelabel_pred in +*) + + let to_end = ctl_or (aftpred None) (loopfallpred None) in let left_or = (* the whole statement is one node *) + make_seq_after guard + (ctl_and CTL.NONSTRICT (ctl_not (ctl_ex to_end)) full_metamatch) after in + let right_or = (* the statement covers multiple nodes *) + ctl_and CTL.NONSTRICT + (ctl_ex + (make_seq guard + [to_end; make_seq_after guard last_metamatch after])) + first_metamatch in + +(* + let left_or = make_seq guard [full_metamatch; and_after guard (ctl_not prelabel_pred) after] in - let right_or = (* the statement covers multiple nodes *) + let right_or = make_seq guard [first_metamatch; ctl_au CTL.NONSTRICT @@ -1203,6 +1223,8 @@ let svar_context_with_add_after stmt s label quantified d ast [ctl_and CTL.NONSTRICT last_metamatch label_pred; and_after guard (ctl_not prelabel_pred) after])] in +*) + let body f = ctl_and CTL.NONSTRICT label_pred (f (ctl_and CTL.NONSTRICT @@ -1222,33 +1244,59 @@ let svar_minus_or_no_add_after stmt s label quantified d ast let matcher d = make_match None guard (make_meta_rule_elem d fvinfo) in let ender = match (d,after) with - (Ast.CONTEXT(pos,Ast.NOTHING),(Tail|End|VeryEnd)) -> + (Ast.PLUS _, _) -> failwith "not possible" + | (Ast.CONTEXT(pos,Ast.NOTHING),(Tail|End|VeryEnd)) -> (* just match the root. don't care about label; always ok *) - make_match None false ast - | (Ast.MINUS(pos,inst,adj,[]),(Tail|End|VeryEnd)) -> - (* don't have to put anything before the beginning, so don't have to - distinguish the first node. so don't have to bother about paths, - just use the label. label ensures that found nodes match up with - what they should because it is in the lhs of the andany. *) - CTL.HackForStmt(CTL.FORWARD,CTL.NONSTRICT, - ctl_and CTL.NONSTRICT label_pred - (make_raw_match label false ast), - ctl_and CTL.NONSTRICT (matcher d) prelabel_pred) - | _ -> - (* more safe but less efficient *) + make_raw_match None false ast + | (Ast.CONTEXT(pos,Ast.BEFORE(_,_)),(Tail|End|VeryEnd)) -> + ctl_and CTL.NONSTRICT + (make_raw_match None false ast) (* statement *) + (matcher d) (* transformation *) + | (Ast.CONTEXT(pos,(Ast.NOTHING|Ast.BEFORE(_,_))),(After a | Guard a)) -> + (* This case and the MINUS one couldprobably be merged, if + HackForStmt were to notice when its arguments are trivial *) let first_metamatch = matcher d in - let rest_metamatch = - matcher - (match d with - Ast.MINUS(pos,inst,adj,_) -> Ast.MINUS(pos,inst,adj,[]) - | Ast.CONTEXT(pos,_) -> Ast.CONTEXT(pos,Ast.NOTHING) - | Ast.PLUS -> failwith "not possible") in - let rest_nodes = ctl_and CTL.NONSTRICT rest_metamatch prelabel_pred in - let last_node = and_after guard (ctl_not prelabel_pred) after in + (* try to follow after link *) + let to_end = ctl_or (aftpred None) (loopfallpred None) in + let is_compound = + ctl_ex(make_seq guard [to_end; CTL.True; a]) in + let not_compound = + make_seq_after guard (ctl_not (ctl_ex to_end)) after in ctl_and CTL.NONSTRICT (make_raw_match label false ast) - (make_seq guard - [first_metamatch; - ctl_au CTL.NONSTRICT rest_nodes last_node]) in + (ctl_and CTL.NONSTRICT + first_metamatch (ctl_or is_compound not_compound)) + | (Ast.CONTEXT(pos,(Ast.AFTER _|Ast.BEFOREAFTER _)),_) -> + failwith "not possible" + | (Ast.MINUS(pos,inst,adj,l),after) -> + let (first_metamatch,last_metamatch,rest_metamatch) = + match l with + [] -> (matcher(Ast.CONTEXT(pos,Ast.NOTHING)),CTL.True,matcher d) + | _ -> (matcher d, + matcher(Ast.MINUS(pos,inst,adj,[])), + ctl_and CTL.NONSTRICT + (ctl_not (make_raw_match label false ast)) + (matcher(Ast.MINUS(pos,inst,adj,[])))) in + (* try to follow after link *) + let to_end = ctl_or (aftpred None) (loopfallpred None) in + let is_compound = + ctl_ex + (make_seq guard + [to_end; make_seq_after guard last_metamatch after]) in + let not_compound = + make_seq_after guard (ctl_not (ctl_ex to_end)) after in + ctl_and CTL.NONSTRICT + (ctl_and CTL.NONSTRICT (make_raw_match label false ast) + (ctl_and CTL.NONSTRICT + first_metamatch (ctl_or is_compound not_compound))) + (* don't have to put anything before the beginning, so don't have to + distinguish the first node. so don't have to bother about paths, + just use the label. label ensures that found nodes match up with + what they should because it is in the lhs of the andany. *) + (CTL.HackForStmt(CTL.FORWARD,CTL.NONSTRICT, + ctl_and CTL.NONSTRICT label_pred + (make_raw_match label false ast), + ctl_and CTL.NONSTRICT rest_metamatch prelabel_pred)) + in let body f = ctl_and CTL.NONSTRICT label_pred (f ender) in let stmt_fvs = Ast.get_fvs stmt in let fvs = get_unquantified quantified stmt_fvs in @@ -1284,7 +1332,7 @@ let dots_au is_strict toend label s wrapcode n x seq_after y quantifier = let lv = get_label_ctr() in let labelpred = CTL.Pred(Lib_engine.Label lv,CTL.Control) in let preflabelpred = label_pred_maker (Some (lv,ref true)) in - let is_paren = + (*let is_paren = (* Rather a special case. But if the code afterwards is just a } then there is no point checking after a goto that it does not appear. *) @@ -1297,7 +1345,7 @@ let dots_au is_strict toend label s wrapcode n x seq_after y quantifier = CTL.Pred(Lib_engine.Paren _,_) -> true | _ -> false in is_paren e1 or is_paren e2 - | _ -> false in + | _ -> false in *) ctl_or (aftpred label) (quantify false [lv] (ctl_and CTL.NONSTRICT @@ -1538,7 +1586,7 @@ and whencond_false e label guard quantified = let (if_headers, while_headers, for_headers) = make_whencond_headers e e1 label guard quantified in ctl_or (ctl_and CTL.NONSTRICT (falsepred label) (ctl_back_ex if_headers)) - (ctl_and CTL.NONSTRICT (fallpred label) + (ctl_and CTL.NONSTRICT (loopfallpred label) (ctl_or (ctl_back_ex if_headers) (ctl_or (ctl_back_ex while_headers) (ctl_back_ex for_headers)))) @@ -1615,9 +1663,9 @@ and statement stmt after quantified minus_quantified this makes more matching for things like when (...) S, but perhaps that matching is not so costly anyway *) (*Ast.MetaStmt(_,Type_cocci.Unitary,_,false) when guard -> CTL.True*) - | Ast.MetaStmt((s,_,(Ast.CONTEXT(_,Ast.BEFOREAFTER(_,_)) as d),_), + | Ast.MetaStmt((s,_,(Ast.CONTEXT(_,Ast.BEFOREAFTER(_,_,_)) as d),_), keep,seqible,_) - | Ast.MetaStmt((s,_,(Ast.CONTEXT(_,Ast.AFTER(_)) as d),_), + | Ast.MetaStmt((s,_,(Ast.CONTEXT(_,Ast.AFTER(_,_)) as d),_), keep,seqible,_)-> svar_context_with_add_after stmt s label quantified d ast seqible after @@ -1666,16 +1714,18 @@ and statement stmt after quantified minus_quantified when !Flag.sgrep_mode2 -> (* in sgrep mode, we can propagate the - *) Some (Ast.MINUS(Ast.NoPos,inst1,adj1,l1@l2)) - | (Ast.MINUS(_,_,_,l1),Ast.MINUS(_,_,_,l2)) - | (Ast.CONTEXT(_,Ast.BEFORE(l1)), - Ast.CONTEXT(_,Ast.AFTER(l2))) -> - Some (Ast.CONTEXT(Ast.NoPos,Ast.BEFORE(l1@l2))) + | (Ast.MINUS(_,_,_,l1),Ast.MINUS(_,_,_,l2)) -> + Some (Ast.CONTEXT(Ast.NoPos,Ast.BEFORE(l1@l2,Ast.ONE))) + | (Ast.CONTEXT(_,Ast.BEFORE(l1,c1)), + Ast.CONTEXT(_,Ast.AFTER(l2,c2))) -> + (if not (c1 = c2) then failwith "bad + code"); + Some (Ast.CONTEXT(Ast.NoPos,Ast.BEFORE(l1@l2,c1))) | (Ast.CONTEXT(_,Ast.BEFORE(_)),Ast.CONTEXT(_,Ast.NOTHING)) | (Ast.CONTEXT(_,Ast.NOTHING),Ast.CONTEXT(_,Ast.NOTHING)) -> Some retmc | (Ast.CONTEXT(_,Ast.NOTHING), - Ast.CONTEXT(_,Ast.AFTER(l))) -> - Some (Ast.CONTEXT(Ast.NoPos,Ast.BEFORE(l))) + Ast.CONTEXT(_,Ast.AFTER(l,c))) -> + Some (Ast.CONTEXT(Ast.NoPos,Ast.BEFORE(l,c))) | _ -> None in let ret = Ast.make_mcode "return" in let edots = @@ -1768,11 +1818,14 @@ and statement stmt after quantified minus_quantified (quantify guard b1fvs (make_seq [start_brace; - quantify guard b2fvs - (statement_list body - (After (make_seq_after end_brace after)) - new_quantified2 new_mquantified2 - (Some (lv,ref true)) llabel slabel false guard)])) in + (ctl_or + (if !exists = Exists then CTL.False else (aftpred label)) + (quantify guard b2fvs + (statement_list body + (After (make_seq_after end_brace after)) + new_quantified2 new_mquantified2 + (Some (lv,ref true)) + llabel slabel false guard)))])) in if ends_in_return body then (* matching error handling code *) @@ -2001,7 +2054,8 @@ and statement stmt after quantified minus_quantified let no_header = ctl_not (List.fold_left ctl_or_fl CTL.False - (decls_all_code::case_headers)) in + (List.map ctl_uncheck + (decls_all_code::case_headers))) in let case_code = List.map (function case_line -> diff --git a/engine/asttoctl2.mli b/engine/asttoctl2.mli index 7e9c2e7..98828e3 100644 --- a/engine/asttoctl2.mli +++ b/engine/asttoctl2.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + type cocci_predicate = Lib_engine.predicate * Ast_cocci.meta_name Ast_ctl.modif type formula = (cocci_predicate,Ast_cocci.meta_name, Wrapper_ctl.info) Ast_ctl.generic_ctl diff --git a/engine/asttomember.ml b/engine/asttomember.ml index 261a1b7..d4c32f3 100644 --- a/engine/asttomember.ml +++ b/engine/asttomember.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* on the first pass, onlyModif is true, so we don't see all matched nodes, @@ -30,7 +30,7 @@ module CTL = Ast_ctl let mcode r (_,_,kind,_) = match kind with Ast.MINUS(_,_,_,_) -> true - | Ast.PLUS -> failwith "not possible" + | Ast.PLUS _ -> failwith "not possible" | Ast.CONTEXT(_,info) -> not (info = Ast.NOTHING) let no_mcode _ _ = false diff --git a/engine/asttomember.mli b/engine/asttomember.mli index 5d3a39a..d5a93aa 100644 --- a/engine/asttomember.mli +++ b/engine/asttomember.mli @@ -1,2 +1,24 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val asttomember : Ast_cocci.rule -> Ast_cocci.meta_name list list -> (Lib_engine.predicate * Ast_cocci.meta_name Ast_ctl.modif) list list list diff --git a/engine/c_vs_c.ml b/engine/c_vs_c.ml index 3bb9e77..5799d96 100644 --- a/engine/c_vs_c.ml +++ b/engine/c_vs_c.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Common diff --git a/engine/c_vs_c.mli b/engine/c_vs_c.mli index 63548fb..55abe18 100644 --- a/engine/c_vs_c.mli +++ b/engine/c_vs_c.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val eq_type : Ast_c.fullType -> Ast_c.fullType -> bool val merge_type : Ast_c.fullType -> Ast_c.fullType -> Ast_c.fullType diff --git a/engine/check_exhaustive_pattern.ml b/engine/check_exhaustive_pattern.ml index 3bd7e1a..6b193af 100644 --- a/engine/check_exhaustive_pattern.ml +++ b/engine/check_exhaustive_pattern.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) diff --git a/engine/check_reachability.ml b/engine/check_reachability.ml index da6758b..82b62fa 100644 --- a/engine/check_reachability.ml +++ b/engine/check_reachability.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* ---------------------------------------------------------------- *) diff --git a/engine/check_reachability.mli b/engine/check_reachability.mli index 21ef7be..0632ae1 100644 --- a/engine/check_reachability.mli +++ b/engine/check_reachability.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + type witness = (Ograph_extended.nodei, unit, (Ograph_extended.nodei, unit, unit) Ast_ctl.generic_ctl list) diff --git a/engine/cocci_vs_c.ml b/engine/cocci_vs_c.ml index 080df87..5955efe 100644 --- a/engine/cocci_vs_c.ml +++ b/engine/cocci_vs_c.ml @@ -1,23 +1,41 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* Yoann Padioleau, Julia Lawall + * + * Copyright (C) 2006, 2007, 2008 Ecole des Mines de Nantes + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License (GPL) + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * file license.txt for more details. + * + * This file was part of Coccinelle. + *) + open Common module A = Ast_cocci @@ -38,10 +56,10 @@ let pr2, pr2_once = Common.mk_pr2_wrappers Flag_matcher.verbose_matcher type sequence = Ordered | Unordered -let seqstyle eas = - match A.unwrap eas with - | A.DOTS _ -> Ordered - | A.CIRCLES _ -> Unordered +let seqstyle eas = + match A.unwrap eas with + | A.DOTS _ -> Ordered + | A.CIRCLES _ -> Unordered | A.STARS _ -> failwith "not handling stars" let (redots : 'a A.dots -> 'a list -> 'a A.dots)=fun eas easundots -> @@ -94,7 +112,7 @@ let mcode_contain_plus = function | A.CONTEXT _ -> true | A.MINUS (_,_,_,[]) -> false | A.MINUS (_,_,_,x::xs) -> true - | A.PLUS -> raise Impossible + | A.PLUS _ -> raise Impossible let mcode_simple_minus = function | A.MINUS (_,_,_,[]) -> true @@ -119,7 +137,7 @@ let generalize_mcode ia = let (s1, i, mck, pos) = ia in let new_mck = match mck with - | A.PLUS -> raise Impossible + | A.PLUS _ -> raise Impossible | A.CONTEXT (A.NoPos,x) -> A.CONTEXT (A.DontCarePos,x) | A.MINUS (A.NoPos,inst,adj,x) -> @@ -274,7 +292,7 @@ let equal_metavarval valu valu' = | Ast_c.MetaPosVal (posa1,posa2), Ast_c.MetaPosVal (posb1,posb2) -> Ast_cocci.equal_pos posa1 posb1 && Ast_cocci.equal_pos posa2 posb2 - + | Ast_c.MetaPosValList l1, Ast_c.MetaPosValList l2 -> List.exists (function (fla,cea,posa1,posa2) -> @@ -641,7 +659,11 @@ module type PARAM = (unit -> Common.filename * string * Ast_c.posl * Ast_c.posl) -> (unit -> tin -> 'x tout) -> (tin -> 'x tout) - val check_constraints : + val check_idconstraint : + ('a -> 'b -> bool) -> 'a -> 'b -> + (unit -> tin -> 'x tout) -> (tin -> 'x tout) + + val check_constraints_ne : ('a, 'b) matcher -> 'a list -> 'b -> (unit -> tin -> 'x tout) -> (tin -> 'x tout) @@ -659,7 +681,7 @@ module type PARAM = (*****************************************************************************) module COCCI_VS_C = - functor (X : PARAM) -> + functor (X : PARAM) -> struct type ('a, 'b) matcher = 'a -> 'b -> X.tin -> ('a * 'b) X.tout @@ -697,6 +719,45 @@ but I don't know how to declare polymorphism across functors *) let dots2metavar (_,info,mcodekind,pos) = (("","..."),info,mcodekind,pos) let metavar2dots (_,info,mcodekind,pos) = ("...",info,mcodekind,pos) +let satisfies_iconstraint c id : bool = + match c with + A.IdNoConstraint -> true + | A.IdNegIdSet l -> not (List.mem id l) + | A.IdRegExp (_,recompiled) -> + if Str.string_match recompiled id 0 then + true + else + false + | A.IdNotRegExp (_,recompiled) -> + if Str.string_match recompiled id 0 then + false + else + true + +let satisfies_econstraint c exp : bool = + match Ast_c.unwrap_expr exp with + Ast_c.Ident (name) -> + ( + match name with + Ast_c.RegularName rname -> satisfies_iconstraint c (Ast_c.unwrap_st rname) + | Ast_c.CppConcatenatedName _ -> + pr2_once ("WARNING: Unable to apply a constraint on a CppConcatenatedName identifier !"); true + | Ast_c.CppVariadicName _ -> + pr2_once ("WARNING: Unable to apply a constraint on a CppVariadicName identifier !"); true + | Ast_c.CppIdentBuilder _ -> + pr2_once ("WARNING: Unable to apply a constraint on a CppIdentBuilder identifier !"); true + ) + | Ast_c.Constant cst -> + (match cst with + | Ast_c.String (str, _) -> satisfies_iconstraint c str + | Ast_c.MultiString strlist -> + pr2_once ("WARNING: Unable to apply a constraint on an multistring constant !"); true + | Ast_c.Char (char , _) -> satisfies_iconstraint c char + | Ast_c.Int (int , _) -> satisfies_iconstraint c int + | Ast_c.Float (float, _) -> satisfies_iconstraint c float + ) + | _ -> pr2_once ("WARNING: Unable to apply a constraint on an expression !"); true + (*---------------------------------------------------------------------------*) (* toc: * - expression @@ -762,27 +823,60 @@ let rec (expression: (A.expression, Ast_c.expression) matcher) = pr2_once ("Missing type information. Certainly a pb in " ^ "annotate_typer.ml"); fail - + | Some tas, Some tb -> - tas +> List.fold_left (fun acc ta -> + tas +> List.fold_left (fun acc ta -> acc >|+|> compatible_type ta tb) fail ) >>= (fun () () -> - X.check_constraints expression constraints eb - (fun () -> - let max_min _ = - Lib_parsing_c.lin_col_by_pos (Lib_parsing_c.ii_of_expr expb) in - X.envf keep inherited (ida, Ast_c.MetaExprVal expb, max_min) - (fun () -> - X.distrf_e ida expb >>= (fun ida expb -> - return ( - A.MetaExpr (ida,constraints,keep,opttypa,form,inherited)+> - A.rewrap ea, - expb - )) - ))) + match constraints with + Ast_cocci.NoConstraint -> + let max_min _ = + Lib_parsing_c.lin_col_by_pos (Lib_parsing_c.ii_of_expr expb) in + X.envf keep inherited (ida, Ast_c.MetaExprVal expb, max_min) + (fun () -> + X.distrf_e ida expb >>= + (fun ida expb -> + return ( + A.MetaExpr (ida,constraints,keep,opttypa,form,inherited)+> + A.rewrap ea, + expb + )) + ) + + | Ast_cocci.NotIdCstrt cstrt -> + X.check_idconstraint satisfies_econstraint cstrt eb + (fun () -> + let max_min _ = + Lib_parsing_c.lin_col_by_pos (Lib_parsing_c.ii_of_expr expb) in + X.envf keep inherited (ida, Ast_c.MetaExprVal expb, max_min) + (fun () -> + X.distrf_e ida expb >>= + (fun ida expb -> + return ( + A.MetaExpr (ida,constraints,keep,opttypa,form,inherited)+> + A.rewrap ea, + expb + )) + )) + + | Ast_cocci.NotExpCstrt cstrts -> + X.check_constraints_ne expression cstrts eb + (fun () -> + let max_min _ = + Lib_parsing_c.lin_col_by_pos (Lib_parsing_c.ii_of_expr expb) in + X.envf keep inherited (ida, Ast_c.MetaExprVal expb, max_min) + (fun () -> + X.distrf_e ida expb >>= + (fun ida expb -> + return ( + A.MetaExpr (ida,constraints,keep,opttypa,form,inherited)+> + A.rewrap ea, + expb + )) + ))) else fail - + (* old: * | A.MetaExpr(ida,false,opttypa,_inherited), expb -> * D.distribute_mck (mcodekind ida) D.distribute_mck_e expb binding @@ -1178,7 +1272,7 @@ and (ident_cpp: info_ident -> (A.ident, B.name) matcher) = fail and (ident: info_ident -> (A.ident, string * Ast_c.info) matcher) = - fun infoidb ida ((idb, iib) as ib) -> + fun infoidb ida ((idb, iib)) -> (* (idb, iib) as ib *) X.all_bound (A.get_inherited ida) >&&> match A.unwrap ida with | A.Id sa -> @@ -1190,9 +1284,8 @@ and (ident: info_ident -> (A.ident, string * Ast_c.info) matcher) = )) else fail - | A.MetaId(mida,constraints,keep,inherited) -> - X.check_constraints (ident infoidb) constraints ib + X.check_idconstraint satisfies_iconstraint constraints idb (fun () -> let max_min _ = Lib_parsing_c.lin_col_by_pos [iib] in (* use drop_pos for ids so that the pos is not added a second time in @@ -1208,7 +1301,7 @@ and (ident: info_ident -> (A.ident, string * Ast_c.info) matcher) = | A.MetaFunc(mida,constraints,keep,inherited) -> let is_function _ = - X.check_constraints (ident infoidb) constraints ib + X.check_idconstraint satisfies_iconstraint constraints idb (fun () -> let max_min _ = Lib_parsing_c.lin_col_by_pos [iib] in X.envf keep inherited (A.drop_pos mida,Ast_c.MetaFuncVal idb,max_min) @@ -1232,7 +1325,7 @@ and (ident: info_ident -> (A.ident, string * Ast_c.info) matcher) = | A.MetaLocalFunc(mida,constraints,keep,inherited) -> (match infoidb with | LocalFunction -> - X.check_constraints (ident infoidb) constraints ib + X.check_idconstraint satisfies_iconstraint constraints idb (fun () -> let max_min _ = Lib_parsing_c.lin_col_by_pos [iib] in X.envf keep inherited @@ -3316,7 +3409,8 @@ let rec (rule_elem_node: (A.rule_elem, Control_flow_c.node) matcher) = let default = A.MetaRuleElem(mcode,keep,inherited), unwrap_node in (match unwrap_node with | F.CaseNode _ - | F.TrueNode | F.FalseNode | F.AfterNode | F.FallThroughNode + | F.TrueNode | F.FalseNode | F.AfterNode + | F.LoopFallThroughNode | F.FallThroughNode | F.InLoopNode -> if X.mode =*= PatternMode then return default @@ -3365,7 +3459,8 @@ let rec (rule_elem_node: (A.rule_elem, Control_flow_c.node) matcher) = * TODO: and F.Fake ? *) | _, F.EndStatement _ | _, F.CaseNode _ - | _, F.TrueNode | _, F.FalseNode | _, F.AfterNode | _, F.FallThroughNode + | _, F.TrueNode | _, F.FalseNode | _, F.AfterNode + | _, F.FallThroughNode | _, F.LoopFallThroughNode | _, F.InLoopNode -> fail2() diff --git a/engine/cocci_vs_c.mli b/engine/cocci_vs_c.mli index 0b6798d..e41c4ea 100644 --- a/engine/cocci_vs_c.mli +++ b/engine/cocci_vs_c.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + (*****************************************************************************) (* Cocci vs C *) (*****************************************************************************) @@ -152,7 +174,11 @@ module type PARAM = (unit -> Common.filename * string * Ast_c.posl * Ast_c.posl) -> (unit -> tin -> 'x tout) -> (tin -> 'x tout) - val check_constraints : + val check_idconstraint : + ('a -> 'b -> bool) -> 'a -> 'b -> + (unit -> tin -> 'x tout) -> (tin -> 'x tout) + + val check_constraints_ne : ('a, 'b) matcher -> 'a list -> 'b -> (unit -> tin -> 'x tout) -> (tin -> 'x tout) diff --git a/engine/ctlcocci_integration.ml b/engine/ctlcocci_integration.ml index 2719cc8..5c6c12d 100644 --- a/engine/ctlcocci_integration.ml +++ b/engine/ctlcocci_integration.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Common @@ -133,6 +133,7 @@ let (labels_for_ctl: string list (* dropped isos *) -> | Lib_engine.FalseBranch, F.FalseNode -> [nodei, (p,[])] | Lib_engine.After, F.AfterNode -> [nodei, (p,[])] | Lib_engine.FallThrough, F.FallThroughNode -> [nodei,(p,[])] + | Lib_engine.LoopFallThrough, F.LoopFallThroughNode -> [nodei,(p,[])] | Lib_engine.FunHeader, F.FunHeader _ -> [nodei, (p,[])] | Lib_engine.Top, F.TopNode -> [nodei, (p,[])] | Lib_engine.Exit, F.Exit -> [nodei, (p,[])] @@ -144,6 +145,7 @@ let (labels_for_ctl: string list (* dropped isos *) -> | Lib_engine.FalseBranch, _ -> [] | Lib_engine.After, _ -> [] | Lib_engine.FallThrough, _ -> [] + | Lib_engine.LoopFallThrough, _ -> [] | Lib_engine.FunHeader, _ -> [] | Lib_engine.Top, _ -> [] | Lib_engine.Exit, _ -> [] diff --git a/engine/ctlcocci_integration.mli b/engine/ctlcocci_integration.mli index f515e06..e87f6ab 100644 --- a/engine/ctlcocci_integration.mli +++ b/engine/ctlcocci_integration.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + open Ograph_extended val labels_for_ctl : diff --git a/engine/ctltotex.ml b/engine/ctltotex.ml index 092c766..2c658c5 100644 --- a/engine/ctltotex.ml +++ b/engine/ctltotex.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module CTL = Ast_ctl @@ -264,6 +264,7 @@ let pred2c = function | Lib_engine.FalseBranch -> ("\\msf{FalseBranch}",11) | Lib_engine.After -> ("\\msf{After}",5) | Lib_engine.FallThrough -> ("\\msf{FallThrough}",11) + | Lib_engine.LoopFallThrough -> ("\\msf{LoopFallThrough}",15) | Lib_engine.Return -> ("\\msf{Return}",6) | Lib_engine.FunHeader -> ("\\msf{FunHeader}",9) | Lib_engine.Top -> ("\\msf{Top}",3) diff --git a/engine/ctltotex.mli b/engine/ctltotex.mli index 68354f5..88c70e5 100644 --- a/engine/ctltotex.mli +++ b/engine/ctltotex.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val totex : string -> Ast_cocci.rule list -> diff --git a/engine/flag_engine.ml b/engine/flag_engine.ml dissimilarity index 70% index 5783e6b..d6df818 100644 --- a/engine/flag_engine.ml +++ b/engine/flag_engine.ml @@ -1,34 +1,34 @@ -(* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) - - -let debug_engine = ref false - -(* false = simpler formulas, only for debugging *) -let useEU = ref true - -let disallow_nested_exps = ref false - -(* if this flag is not set, then break and continue are also error exits *) -let only_return_is_error_exit = ref false - -(* a hack to allow adding code in some more sgrep-like uses *) -let allow_inconsistent_paths = ref false +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +let debug_engine = ref false + +(* false = simpler formulas, only for debugging *) +let useEU = ref true + +let disallow_nested_exps = ref false + +(* if this flag is not set, then break and continue are also error exits *) +let only_return_is_error_exit = ref false + +(* a hack to allow adding code in some more sgrep-like uses *) +let allow_inconsistent_paths = ref false diff --git a/engine/flag_matcher.ml b/engine/flag_matcher.ml dissimilarity index 62% index 9545d76..8c2f4e0 100644 --- a/engine/flag_matcher.ml +++ b/engine/flag_matcher.ml @@ -1,45 +1,45 @@ -(* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) - - -let debug_engine = ref false -let verbose_matcher = ref true - - -(* false = simpler formulas, only for debugging *) -let useEU = ref true - -let disallow_nested_exps = ref false - -(* if this flag is not set, then break and continue are also error exits *) -let only_return_is_error_exit = ref false - -(* a hack to allow adding code in some more sgrep-like uses *) -let allow_inconsistent_paths = ref false - -(* see the use of this variable in asttoctl2.ml *) -let no_safe_expressions = ref false - -let show_misc = ref true - - -let show_transinfo = ref false - +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +let debug_engine = ref false +let verbose_matcher = ref true + + +(* false = simpler formulas, only for debugging *) +let useEU = ref true + +let disallow_nested_exps = ref false + +(* if this flag is not set, then break and continue are also error exits *) +let only_return_is_error_exit = ref false + +(* a hack to allow adding code in some more sgrep-like uses *) +let allow_inconsistent_paths = ref false + +(* see the use of this variable in asttoctl2.ml *) +let no_safe_expressions = ref false + +let show_misc = ref true + + +let show_transinfo = ref false + diff --git a/engine/isomorphisms_c_c.ml b/engine/isomorphisms_c_c.ml index 151544b..5138578 100644 --- a/engine/isomorphisms_c_c.ml +++ b/engine/isomorphisms_c_c.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Common diff --git a/engine/lib_engine.ml b/engine/lib_engine.ml index 54647b8..e2ff06d 100644 --- a/engine/lib_engine.ml +++ b/engine/lib_engine.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Ograph_extended @@ -30,7 +30,7 @@ type mvar = Ast_cocci.meta_name type predicate = InLoop | TrueBranch | FalseBranch | After (* pointer to the code after an if or while *) - | FallThrough + | FallThrough | LoopFallThrough | Return (* any exit from the current function *) | FunHeader | Top | Exit | ErrorExit | Goto | Paren of Ast_cocci.meta_name diff --git a/engine/lib_matcher_c.ml b/engine/lib_matcher_c.ml dissimilarity index 99% index 0ee2a4f..57e52bf 100644 --- a/engine/lib_matcher_c.ml +++ b/engine/lib_matcher_c.ml @@ -1,22 +1,22 @@ -(* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) - - +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + diff --git a/engine/lib_matcher_c.mli b/engine/lib_matcher_c.mli index e69de29..57e52bf 100644 --- a/engine/lib_matcher_c.mli +++ b/engine/lib_matcher_c.mli @@ -0,0 +1,22 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + diff --git a/engine/main.ml b/engine/main.ml index 833a032..0d2d384 100644 --- a/engine/main.ml +++ b/engine/main.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* ----------------------------------------------------------------------- *) diff --git a/engine/pattern_c.ml b/engine/pattern_c.ml index 9b964e7..67f7414 100644 --- a/engine/pattern_c.ml +++ b/engine/pattern_c.ml @@ -1,23 +1,40 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* Yoann Padioleau + * + * Copyright (C) 2006, 2007 Ecole des Mines de Nantes + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License (GPL) + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * file license.txt for more details. + * + * This file was part of Coccinelle. + *) open Common module Flag_engine = Flag_matcher @@ -246,7 +263,7 @@ module XMATCH = struct (* ------------------------------------------------------------------------*) let tag_mck_pos mck posmck = match mck with - | Ast_cocci.PLUS -> Ast_cocci.PLUS + | Ast_cocci.PLUS c -> Ast_cocci.PLUS c | Ast_cocci.CONTEXT (pos, xs) -> assert (pos =*= Ast_cocci.NoPos || pos =*= Ast_cocci.DontCarePos); Ast_cocci.CONTEXT (posmck, xs) @@ -280,9 +297,17 @@ module XMATCH = struct (* ------------------------------------------------------------------------*) - (* Constraints on metavariable values *) + (* Constraints on metavariable values *) (* ------------------------------------------------------------------------*) - let check_constraints matcher constraints exp = fun f tin -> + let check_idconstraint matcher c id = fun f tin -> + if matcher c id then + (* success *) + f () tin + else + (* failure *) + fail tin + + let check_constraints_ne matcher constraints exp = fun f tin -> let rec loop = function [] -> f () tin (* success *) | c::cs -> @@ -292,7 +317,7 @@ module XMATCH = struct loop constraints let check_pos_constraints constraints pvalu f tin = - check_constraints + check_constraints_ne (fun c exp tin -> let success = [[]] in let failure = [] in diff --git a/engine/pattern_c.mli b/engine/pattern_c.mli index 76525ff..b29c66e 100644 --- a/engine/pattern_c.mli +++ b/engine/pattern_c.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val match_re_node : string list (* dropped isos *) -> diff --git a/engine/postprocess_transinfo.ml b/engine/postprocess_transinfo.ml index a3e6134..fa41cd3 100644 --- a/engine/postprocess_transinfo.ml +++ b/engine/postprocess_transinfo.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* two goals: first drop from the environments things that are not used, diff --git a/engine/postprocess_transinfo.mli b/engine/postprocess_transinfo.mli index e45a8d6..6a2033a 100644 --- a/engine/postprocess_transinfo.mli +++ b/engine/postprocess_transinfo.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val process : Ast_cocci.meta_name list (* used after *) -> (Ast_cocci.meta_name * Lib_engine.metavar_binding_kind2) list diff --git a/engine/pretty_print_engine.ml b/engine/pretty_print_engine.ml index 1842f8d..546e6f5 100644 --- a/engine/pretty_print_engine.ml +++ b/engine/pretty_print_engine.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Common.Infix @@ -88,6 +88,7 @@ let rec pp_predicate = function | FalseBranch -> pp "FalseBranch" | After -> pp "After" | FallThrough -> pp "FallThrough" + | LoopFallThrough -> pp "LoopFallThrough" | Return -> pp "Return" | FunHeader -> pp "FunHeader" | Top -> pp "Top" diff --git a/engine/pretty_print_engine.mli b/engine/pretty_print_engine.mli index 81c9536..034207e 100644 --- a/engine/pretty_print_engine.mli +++ b/engine/pretty_print_engine.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + (* could be in pretty_print_c because dependent of ast_c but metavars * are in ast_c for "bad" reason, so better put the pretty_print * of metavars here diff --git a/engine/sgrep.ml b/engine/sgrep.ml index d18659e..9f31764 100644 --- a/engine/sgrep.ml +++ b/engine/sgrep.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) type marker = @@ -72,7 +72,7 @@ let process_sgrep ii mck = amarker file line (col + String.length str); Ast_cocci.MINUS(pos,inst,adj,repl)) | Ast_cocci.CONTEXT(pos,Ast_cocci.NOTHING) -> mck - | Ast_cocci.CONTEXT(pos,Ast_cocci.BEFORE(bef)) -> + | Ast_cocci.CONTEXT(pos,Ast_cocci.BEFORE(bef,c)) -> (match extract_sgrep_marker bef with (NoMark,_) -> mck | (BefMark(marker),[]) -> @@ -82,9 +82,9 @@ let process_sgrep ii mck = | (BefMark(marker),bef) -> Printf.printf "Match on line %s starting at %s: line %d offset %d\n" marker file line col; - Ast_cocci.CONTEXT(pos,Ast_cocci.BEFORE(bef)) + Ast_cocci.CONTEXT(pos,Ast_cocci.BEFORE(bef,c)) | _ -> failwith "after not possible") - | Ast_cocci.CONTEXT(pos,Ast_cocci.AFTER(aft)) -> + | Ast_cocci.CONTEXT(pos,Ast_cocci.AFTER(aft,c)) -> (match extract_sgrep_marker aft with (NoMark,_) -> mck | (AftMark(marker),[]) -> @@ -94,9 +94,9 @@ let process_sgrep ii mck = | (AftMark(marker),aft) -> Printf.printf "Match on line %s ending at %s: line %d offset %d\n" marker file line (col + String.length str); - Ast_cocci.CONTEXT(pos,Ast_cocci.AFTER(aft)) + Ast_cocci.CONTEXT(pos,Ast_cocci.AFTER(aft,c)) | _ -> failwith "before not possible") - | Ast_cocci.CONTEXT(pos,Ast_cocci.BEFOREAFTER(bef,aft)) -> + | Ast_cocci.CONTEXT(pos,Ast_cocci.BEFOREAFTER(bef,aft,c)) -> (match extract_sgrep_marker bef with (NoMark,_) -> (match extract_sgrep_marker aft with @@ -105,18 +105,18 @@ let process_sgrep ii mck = Printf.printf "Match on line %s ending at %s: line %d offset %d\n" marker file line (col + String.length str); - Ast_cocci.CONTEXT(pos,Ast_cocci.BEFORE(bef)) + Ast_cocci.CONTEXT(pos,Ast_cocci.BEFORE(bef,c)) | (AftMark(marker),aft) -> Printf.printf "Match on line %s ending at %s: line %d offset %d\n" marker file line (col + String.length str); - Ast_cocci.CONTEXT(pos,Ast_cocci.BEFOREAFTER(bef,aft)) + Ast_cocci.CONTEXT(pos,Ast_cocci.BEFOREAFTER(bef,aft,c)) | _ -> failwith "before not possible") | (BefMark(marker),[]) -> Printf.printf "Match on line %s starting at %s: line %d offset %d\n" marker file line col; (match extract_sgrep_marker aft with - (NoMark,_) -> Ast_cocci.CONTEXT(pos,Ast_cocci.AFTER(aft)) + (NoMark,_) -> Ast_cocci.CONTEXT(pos,Ast_cocci.AFTER(aft,c)) | (AftMark(marker),[]) -> Printf.printf "Match on line %s ending at %s: line %d offset %d\n" @@ -126,24 +126,24 @@ let process_sgrep ii mck = Printf.printf "Match on line %s ending at %s: line %d offset %d\n" marker file line (col + String.length str); - Ast_cocci.CONTEXT(pos,Ast_cocci.AFTER(aft)) + Ast_cocci.CONTEXT(pos,Ast_cocci.AFTER(aft,c)) | _ -> failwith "before not possible") | (BefMark(marker),bef) -> Printf.printf "Match on line %s starting at %s: line %d offset %d\n" marker file line col; (match extract_sgrep_marker aft with (NoMark,_) -> - Ast_cocci.CONTEXT(pos,Ast_cocci.BEFOREAFTER(bef,aft)) + Ast_cocci.CONTEXT(pos,Ast_cocci.BEFOREAFTER(bef,aft,c)) | (AftMark(marker),[]) -> Printf.printf "Match on line %s ending at %s: line %d offset %d\n" marker file line (col + String.length str); - Ast_cocci.CONTEXT(pos,Ast_cocci.BEFORE(bef)) + Ast_cocci.CONTEXT(pos,Ast_cocci.BEFORE(bef,c)) | (AftMark(marker),aft) -> Printf.printf "Match on line %s ending at %s: line %d offset %d\n" marker file line (col + String.length str); - Ast_cocci.CONTEXT(pos,Ast_cocci.BEFOREAFTER(bef,aft)) + Ast_cocci.CONTEXT(pos,Ast_cocci.BEFOREAFTER(bef,aft,c)) | _ -> failwith "before not possible") | _ -> failwith "after not possible") | _ -> failwith "unexpected plus code" diff --git a/engine/transformation_c.ml b/engine/transformation_c.ml index 11d8009..53a065a 100644 --- a/engine/transformation_c.ml +++ b/engine/transformation_c.ml @@ -1,25 +1,40 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) - - + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* Yoann Padioleau + * + * Copyright (C) 2006, 2007 Ecole des Mines de Nantes + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License (GPL) + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * file license.txt for more details. + * + * This file was part of Coccinelle. + *) open Common module F = Control_flow_c @@ -164,7 +179,7 @@ module XTRANS = struct (* ------------------------------------------------------------------------*) let check_pos info mck pos = match mck with - | Ast_cocci.PLUS -> raise Impossible + | Ast_cocci.PLUS _ -> raise Impossible | Ast_cocci.CONTEXT (Ast_cocci.FixPos (i1,i2),_) | Ast_cocci.MINUS (Ast_cocci.FixPos (i1,i2),_,_,_) -> pos <= i2 && pos >= i1 @@ -185,7 +200,7 @@ module XTRANS = struct let tag_with_mck mck ib = fun tin -> let cocciinforef = ib.Ast_c.cocci_tag in - let (oldmcode, oldenv) = Ast_c.mcode_and_env_of_cocciref cocciinforef in + let (oldmcode, oldenvs) = Ast_c.mcode_and_env_of_cocciref cocciinforef in let mck = (* coccionly: @@ -202,29 +217,44 @@ module XTRANS = struct | _ -> () ); - match (oldmcode,mck) with - | (Ast_cocci.CONTEXT(_,Ast_cocci.NOTHING), _) - | (_, Ast_cocci.CONTEXT(_,Ast_cocci.NOTHING)) - -> + let many_count = function + Ast_cocci.BEFORE(_,Ast_cocci.MANY) | Ast_cocci.AFTER(_,Ast_cocci.MANY) + | Ast_cocci.BEFOREAFTER(_,_,Ast_cocci.MANY) -> true + | _ -> false in + + (match (oldmcode,mck) with + | (Ast_cocci.CONTEXT(_,Ast_cocci.NOTHING), _) -> + (* nothing there, so take the new stuff *) let update_inst inst = function Ast_cocci.MINUS (pos,_,adj,any_xxs) -> Ast_cocci.MINUS (pos,inst,adj,any_xxs) | mck -> mck in - cocciinforef := Some (update_inst tin.extra.index mck, tin.binding); - ib - + cocciinforef := Some (update_inst tin.extra.index mck, [tin.binding]) + | (_, Ast_cocci.CONTEXT(_,Ast_cocci.NOTHING)) -> + (* can this case occur? stay with the old stuff *) + () | (Ast_cocci.MINUS(old_pos,old_inst,old_adj,[]), Ast_cocci.MINUS(new_pos,new_inst,new_adj,[])) - when old_pos = new_pos && (oldenv =*= tin.binding or !Flag.sgrep_mode2) + when old_pos = new_pos && + (List.mem tin.binding oldenvs or !Flag.sgrep_mode2) (* no way to combine adjacency information, just drop one *) -> cocciinforef := Some (Ast_cocci.MINUS (old_pos,Common.union_set old_inst new_inst,old_adj,[]), - tin.binding); + [tin.binding]); (if !Flag_matcher.show_misc - then pr2 "already tagged but only removed, so safe"); - ib + then pr2 "already tagged but only removed, so safe") + + | (Ast_cocci.CONTEXT(old_pos,old_modif), + Ast_cocci.CONTEXT(new_pos,new_modif)) + when old_pos = new_pos && + old_modif = new_modif && many_count old_modif -> + (* iteration only allowed on context; no way to replace something + more than once; now no need for iterable; just check a flag *) + + cocciinforef := + Some(Ast_cocci.CONTEXT(old_pos,old_modif),tin.binding::oldenvs) | _ -> (* coccionly: @@ -241,11 +271,12 @@ module XTRANS = struct *) let pm str mcode env = Printf.sprintf - "%s modification:\n%s\nAccording to environment:\n%s\n" + "%s modification:\n%s\nAccording to environment %d:\n%s\n" str (Common.format_to_string (function _ -> Pretty_print_cocci.print_mcodekind mcode)) + (List.length env) (String.concat "\n" (List.map (function ((r,vr),vl) -> @@ -256,8 +287,9 @@ module XTRANS = struct env)) in flush stdout; flush stderr; Common.pr2 - ("\n"^ (pm "previous" oldmcode oldenv) ^ "\n" ^ - (pm "current" mck tin.binding)); + ("\n"^ (String.concat "\n" + (List.map (pm "previous" oldmcode) oldenvs)) ^ "\n" + ^ (pm "current" mck tin.binding)); failwith (match Ast_c.pinfo_of_info ib with Ast_c.FakeTok _ -> @@ -269,7 +301,8 @@ module XTRANS = struct tin.extra.current_rule_name (Common.error_message (Ast_c.file_of_info ib) (Ast_c.str_of_info ib, Ast_c.opos_of_info ib))) - end + end); + ib let tokenf ia ib = fun tin -> let (_,i,mck,_) = ia in @@ -321,39 +354,39 @@ module XTRANS = struct (match any_befaft with | Ast_cocci.NOTHING -> expr - | Ast_cocci.BEFORE xxs -> + | Ast_cocci.BEFORE (xxs,c) -> distributef ( (fun ib -> tag_with_mck - (Ast_cocci.CONTEXT (pos,Ast_cocci.BEFORE xxs)) ib tin), + (Ast_cocci.CONTEXT (pos,Ast_cocci.BEFORE (xxs,c))) ib tin), (fun x -> x), (fun x -> x), (fun ib -> tag_with_mck - (Ast_cocci.CONTEXT (pos,Ast_cocci.BEFORE xxs)) ib tin) + (Ast_cocci.CONTEXT (pos,Ast_cocci.BEFORE (xxs,c))) ib tin) ) expr - | Ast_cocci.AFTER xxs -> + | Ast_cocci.AFTER (xxs,c) -> distributef ( (fun x -> x), (fun x -> x), (fun ib -> tag_with_mck - (Ast_cocci.CONTEXT (pos,Ast_cocci.AFTER xxs)) ib tin), + (Ast_cocci.CONTEXT (pos,Ast_cocci.AFTER (xxs,c))) ib tin), (fun ib -> tag_with_mck - (Ast_cocci.CONTEXT (pos,Ast_cocci.AFTER xxs)) ib tin) + (Ast_cocci.CONTEXT (pos,Ast_cocci.AFTER (xxs,c))) ib tin) ) expr - | Ast_cocci.BEFOREAFTER (xxs, yys) -> + | Ast_cocci.BEFOREAFTER (xxs, yys, c) -> distributef ( (fun ib -> tag_with_mck - (Ast_cocci.CONTEXT (pos,Ast_cocci.BEFORE xxs)) ib tin), + (Ast_cocci.CONTEXT (pos,Ast_cocci.BEFORE (xxs,c))) ib tin), (fun x -> x), (fun ib -> tag_with_mck - (Ast_cocci.CONTEXT (pos,Ast_cocci.AFTER yys)) ib tin), + (Ast_cocci.CONTEXT (pos,Ast_cocci.AFTER (yys,c))) ib tin), (fun ib -> tag_with_mck - (Ast_cocci.CONTEXT (pos,Ast_cocci.BEFOREAFTER (xxs,yys))) + (Ast_cocci.CONTEXT (pos,Ast_cocci.BEFOREAFTER (xxs,yys,c))) ib tin) ) expr ) - | Ast_cocci.PLUS -> raise Impossible + | Ast_cocci.PLUS _ -> raise Impossible (* use new strategy, collect ii, sort, recollect and tag *) @@ -415,7 +448,7 @@ module XTRANS = struct let get_pos mck = match mck with - | Ast_cocci.PLUS -> raise Impossible + | Ast_cocci.PLUS _ -> raise Impossible | Ast_cocci.CONTEXT (Ast_cocci.FixPos (i1,i2),_) | Ast_cocci.MINUS (Ast_cocci.FixPos (i1,i2),_,_,_) -> Ast_cocci.FixPos (i1,i2) @@ -513,7 +546,8 @@ module XTRANS = struct else fail tin - let check_constraints matcher constraints exp = fun f tin -> f () tin + let check_idconstraint matcher c id = fun f tin -> f () tin + let check_constraints_ne matcher constraints exp = fun f tin -> f () tin (* ------------------------------------------------------------------------*) (* Environment, allbounds *) diff --git a/engine/transformation_c.mli b/engine/transformation_c.mli index 0e943a9..3a7b557 100644 --- a/engine/transformation_c.mli +++ b/engine/transformation_c.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + (* note that now we do the transformation via side effect on ast *) val transform : string (* rule name *) -> string list (* dropped isos *) -> diff --git a/env.sh b/env.sh index 8ecd651..3413607 100644 --- a/env.sh +++ b/env.sh @@ -4,7 +4,7 @@ #!!!!You need to source me with "source env.sh" from the good directory!!!! -# 14 Aug 2009 Try likely locations for support files +# 14 Aug 2009 Try directory we were executed from if [ "$1" ] ; then DIR=$1 @@ -14,23 +14,13 @@ fi if [ ! -r $DIR/standard.iso ] then - if [ -r /usr/local/share/coccinelle/standard.iso ] - then - echo "standard.iso not found in '$DIR' using /usr/local/share/coccinelle" - DIR="/usr/local/share/coccinelle" - else -# The following won't work with "source env.sh" under bash - if [ -r `dirname $0`/standard.iso ] - then - echo "standard.iso not found in '$DIR' using `dirname $0`" - DIR=`dirname $0` - fi - fi + echo "standard.iso not found in '$DIR' trying `dirname $0`" + DIR=`dirname $0` fi if [ ! -r $DIR/standard.iso ] then echo "standard.iso not found in '$DIR'. -Give its directory as the first argument. + Give the coccinelle directory as the first argument. "; else diff --git a/flag_cocci.ml b/flag_cocci.ml index 7399eb2..55510d6 100644 --- a/flag_cocci.ml +++ b/flag_cocci.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* the inputs *) diff --git a/globals/Makefile b/globals/Makefile index c71daa0..226bd5d 100644 --- a/globals/Makefile +++ b/globals/Makefile @@ -1,3 +1,23 @@ +# Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +# This file is part of Coccinelle. +# +# Coccinelle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, according to version 2 of the License. +# +# Coccinelle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Coccinelle. If not, see . +# +# The authors reserve the right to distribute this or future versions of +# Coccinelle under other licenses. + + -include ../Makefile.config diff --git a/globals/config.ml.in b/globals/config.ml.in index 0a446d5..46ed097 100644 --- a/globals/config.ml.in +++ b/globals/config.ml.in @@ -1,4 +1,4 @@ -let version = "0.1.10" +let version = "0.1.11rc1" let path = try (Sys.getenv "COCCINELLE_HOME") diff --git a/globals/flag.ml b/globals/flag.ml index ffc257b..f6c51df 100644 --- a/globals/flag.ml +++ b/globals/flag.ml @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + let sgrep_mode2 = ref false let show_misc = ref true @@ -8,7 +30,8 @@ let show_trying = ref false let track_iso_usage = ref false -let use_glimpse = ref false +type scanner = Glimpse | Google of string | NoScanner +let scanner = ref NoScanner let pyoutput = ref "coccilib.output.Console" diff --git a/main.ml b/main.ml index 9f7b0b7..08d247c 100644 --- a/main.ml +++ b/main.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Common @@ -259,8 +259,10 @@ let short_options = [ "-dir", Arg.Set dir, " process all files in directory recursively"; - "-use_glimpse", Arg.Set Flag.use_glimpse, + "-use_glimpse", Arg.Unit (function _ -> Flag.scanner := Flag.Glimpse), " works with -dir, use info generated by glimpseindex"; + "-use_google", Arg.String (function s -> Flag.scanner := Flag.Google s), + " find relevant files using google code search"; "-patch", Arg.String (function s -> Flag.patch := Some s), (" path name with respect to which a patch should be created\n"^ " \"\" for a file in the current directory"); @@ -277,7 +279,7 @@ let short_options = [ " guess what"; "-date", Arg.Unit (fun () -> - pr2 "version: $Date: 2009/08/27 08:54:57 $"; + pr2 "version: $Date: 2009/09/26 14:17:24 $"; raise (Common.UnixExit 0) ), " guess what"; @@ -436,9 +438,8 @@ let other_options = [ "change of algorithm options", - "", - [ -(* no popl in official version + "", + [ "-popl", Arg.Set FC.popl, " simplified SmPL, for the popl paper"; @@ -451,7 +452,6 @@ let other_options = [ Arg.Unit (function _ -> FC.popl := true; Flag_popl.keep_all_wits := true), " simplified SmPL, for the popl paper"; -*) "-hrule", Arg.String (function s -> @@ -461,6 +461,8 @@ let other_options = [ "-loop", Arg.Set Flag_ctl.loop_in_src_code, " "; "-no_loops", Arg.Set Flag_parsing_c.no_loops, " drop all back edges derived from looping constructs - unsafe"; + "-no_gotos", Arg.Set Flag_parsing_c.no_gotos, + " drop all jumps derived from gotos - unsafe"; "-l1", Arg.Clear Flag_parsing_c.label_strategy_2, " "; "-ifdef_to_if", Arg.Set FC.ifdef_to_if, @@ -500,6 +502,8 @@ let other_options = [ " spacing of + code follows the conventions of Linux"; "-smpl_spacing", Arg.Unit Flag_parsing_c.set_smpl_spacing, " spacing of + code follows the semantic patch"; + "-D", Arg.String Flag_parsing_cocci.set_defined_virtual_rules, + " indicate that a virtual rule should be considered to be matched"; ]; "misc options", @@ -631,12 +635,12 @@ let adjust_stdin cfile k = let glimpse_filter (coccifile, isofile) dir = let (_metavars,astcocci,_free_var_lists,_negated_positions, - _used_after_lists,_positions_lists,_,query) = + _used_after_lists,_positions_lists,_,query,_virt) = Cocci.sp_of_file coccifile (Some isofile) in match query with None -> pr2 "no glimpse keyword inferred from snippet"; None - | Some query -> - let suffixes = if !include_headers then ["c";"h"] else ["c"] in + | Some [query] -> + (let suffixes = if !include_headers then ["c";"h"] else ["c"] in pr2 ("glimpse request = " ^ query); let command = spf "glimpse -y -H %s -N -W -w '%s'" dir query in let (glimpse_res,stat) = Common.cmd_to_list_and_status command in @@ -646,8 +650,8 @@ let glimpse_filter (coccifile, isofile) dir = (glimpse_res +> List.filter (fun file -> List.mem (Common.filesuffix file) suffixes)) - | _ -> None (* error, eg due to pattern too big *) - + | _ -> None (* error, eg due to pattern too big *)) + | _ -> failwith "not possible" (*****************************************************************************) (* Main action *) @@ -681,7 +685,7 @@ let main_action xs = let infiles = Common.profile_code "Main.infiles computation" (fun () -> - match !dir, !kbuild_info, !Flag.use_glimpse with + match !dir, !kbuild_info, !Flag.scanner = Flag.Glimpse with (* glimpse *) | false, _, true -> failwith "-use_glimpse works only with -dir" diff --git a/parsing_c/ast_c.ml b/parsing_c/ast_c.ml index 3c4177d..3ad1bc1 100644 --- a/parsing_c/ast_c.ml +++ b/parsing_c/ast_c.ml @@ -95,7 +95,7 @@ type info = { (* this cocci_tag can be changed, which is how we can express some program * transformations by tagging the tokens involved in this transformation. *) - cocci_tag: (Ast_cocci.mcodekind * metavars_binding) option ref; + cocci_tag: (Ast_cocci.mcodekind * metavars_binding list) option ref; (* set in comment_annotater_c.ml *) comments_tag: comments_around ref; @@ -121,9 +121,9 @@ and 'a wrap3 = 'a * il (* * evotype*) (* ------------------------------------------------------------------------- *) (* was called 'ident' before, but 'name' is I think better - * as concatenated strings can be used not only for identifiers and for + * as concatenated strings can be used not only for identifiers and for * declarators, but also for fields, for labels, etc. - * + * * Note: because now the info is embeded in the name, the info for * expression like Ident, or types like Typename, are not anymore * stored in the expression or type. Hence if you assume this, @@ -132,13 +132,13 @@ and 'a wrap3 = 'a * il (* * evotype*) * the local ii to e. If you want to do that, use the appropiate * wrapper get_local_ii_of_expr_inlining_ii_of_name. *) -and name = +and name = | RegularName of string wrap | CppConcatenatedName of (string wrap) wrap2 (* the ## separators *) list (* normally only used inside list of things, as in parameters or arguments * in which case, cf cpp-manual, it has a special meaning *) | CppVariadicName of string wrap (* ## s *) - | CppIdentBuilder of string wrap (* s ( ) *) * + | CppIdentBuilder of string wrap (* s ( ) *) * ((string wrap) wrap2 list) (* arguments *) @@ -278,7 +278,7 @@ and typeQualifierbis = {const: bool; volatile: bool} (* gccext: cppext: *) and attribute = attributebis wrap and attributebis = - | Attribute of string + | Attribute of string (* ------------------------------------------------------------------------- *) (* C expression *) @@ -289,14 +289,14 @@ and expression = (expressionbis * exp_info ref (* semantic: *)) wrap3 and local = LocalVar of parse_info | NotLocalVar (* cocci: *) and test = Test | NotTest (* cocci: *) - and expressionbis = + and expressionbis = (* Ident can be a enumeration constant, a simple variable, a name of a func. * With cppext, Ident can also be the name of a macro. Sparse says * "an identifier with a meaning is a symbol" *) | Ident of name (* todo? more semantic info such as LocalFunc *) - | Constant of constant + | Constant of constant | FunCall of expression * argument wrap2 (* , *) list (* gccext: x ? /* empty */ : y <=> x ? x : y; hence the 'option' below *) | CondExpr of expression * expression option * expression @@ -309,8 +309,8 @@ and expression = (expressionbis * exp_info ref (* semantic: *)) wrap3 | Postfix of expression * fixOp | Infix of expression * fixOp - | Unary of expression * unaryOp - | Binary of expression * binaryOp * expression + | Unary of expression * unaryOp + | Binary of expression * binaryOp * expression | ArrayAccess of expression * expression @@ -766,10 +766,10 @@ let emptyMetavarsBinding = let emptyAnnotCocci = (Ast_cocci.CONTEXT (Ast_cocci.NoPos,Ast_cocci.NOTHING), - emptyMetavarsBinding) + ([] : metavars_binding list)) let emptyAnnot = - (None: (Ast_cocci.mcodekind * metavars_binding) option) + (None: (Ast_cocci.mcodekind * metavars_binding list) option) (* compatibility mode *) let mcode_and_env_of_cocciref aref = diff --git a/parsing_c/compare_c.ml b/parsing_c/compare_c.ml index c398cb0..7147734 100644 --- a/parsing_c/compare_c.ml +++ b/parsing_c/compare_c.ml @@ -31,6 +31,8 @@ type compare_result = * is not enough to substituate until the end of the line. *) let cvs_keyword_list = [ "Id";"Date"; "Revision"; (* the common one *) + "FreeBSD";"Heimdal";"KAME";"NetBSD";"OpenBSD";"OpenLDAP";"RuOBSD"; + "SourceForge"; "Name";"Author";"CVSHeader";"Header";"Locker";"RCSfile";"Source";"State"; "Rev"; ] @@ -113,7 +115,7 @@ let normal_form_program xs = -let normal_form_token x = +let normal_form_token adjust_cvs x = let x' = match x with | Parser_c.TString ((s, kind),i1) -> Parser_c.TString (("",kind), i1) @@ -122,7 +124,7 @@ let normal_form_token x = x' +> Token_helpers.visitor_info_of_tok (fun info -> let info = Ast_c.al_info 0 info in let str = Ast_c.str_of_info info in - if Common.string_match_substring cvs_keyword_regexp str + if adjust_cvs && Common.string_match_substring cvs_keyword_regexp str then let newstr = cvs_compute_newstr str in rewrap_str newstr info @@ -260,8 +262,7 @@ let is_normal_space_or_comment = function * because when there is a notparsablezone in generated_file, I * don't issue a PbOnlyInNotParsedCorrectly *) -let compare_token filename1 filename2 = - +let do_compare_token adjust_cvs filename1 filename2 = let rec loop xs ys = match xs, ys with @@ -279,8 +280,8 @@ let compare_token filename1 filename2 = Some "not same number of tokens inside C elements" | x::xs, y::ys -> - let x' = normal_form_token x in - let y' = normal_form_token y in + let x' = normal_form_token adjust_cvs x in + let y' = normal_form_token adjust_cvs y in if x' =*= y' then loop xs ys else @@ -354,12 +355,16 @@ let compare_token filename1 filename2 = res, xs - +let compare_token = do_compare_token true (*****************************************************************************) -let compare_default = compare_token +(* compare to a res file *) +let compare_default = do_compare_token true + +(* compare to the source of the transformation *) +let compare_to_original = do_compare_token false let compare_result_to_string (correct, diffxs) = diff --git a/parsing_c/compare_c.mli b/parsing_c/compare_c.mli index 1d7d504..c1c1a07 100644 --- a/parsing_c/compare_c.mli +++ b/parsing_c/compare_c.mli @@ -8,10 +8,11 @@ type compare_result = val compare_ast : Common.filename -> Common.filename -> compare_result * string list -val compare_token : + +val compare_default : (* compare to a res file *) Common.filename -> Common.filename -> compare_result * string list -val compare_default : +val compare_to_original : (* compare to the source of the transformation *) Common.filename -> Common.filename -> compare_result * string list diff --git a/parsing_c/control_flow_c.ml b/parsing_c/control_flow_c.ml index 4bddb08..46466d7 100644 --- a/parsing_c/control_flow_c.ml +++ b/parsing_c/control_flow_c.ml @@ -263,6 +263,7 @@ type node = node1 * string | AfterNode | FallThroughNode + | LoopFallThroughNode | ErrorExit @@ -382,5 +383,6 @@ let extract_fullstatement node = | InLoopNode | AfterNode | FallThroughNode + | LoopFallThroughNode | ErrorExit -> None diff --git a/parsing_c/control_flow_c.mli b/parsing_c/control_flow_c.mli index aaa324d..2fd99ff 100644 --- a/parsing_c/control_flow_c.mli +++ b/parsing_c/control_flow_c.mli @@ -85,6 +85,7 @@ type node = node1 * string (* For debugging. Used by print_graph *) | InLoopNode | AfterNode | FallThroughNode + | LoopFallThroughNode | ErrorExit type edge = Direct diff --git a/parsing_c/control_flow_c_build.ml b/parsing_c/control_flow_c_build.ml index 462e426..ca21a1f 100644 --- a/parsing_c/control_flow_c_build.ml +++ b/parsing_c/control_flow_c_build.ml @@ -296,7 +296,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = match Ast_c.unwrap_st stmt with (* coupling: the Switch case copy paste parts of the Compound case *) - | Ast_c.Compound statxs -> + | Ast_c.Compound statxs -> (* flow_to_ast: *) let (i1, i2) = tuple_of_list2 ii in @@ -331,14 +331,14 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = in !g +> add_arc_opt (starti, newi); - let starti = Some newi in + let finishi = Some newi in - aux_statement_list starti (xi, newxi) statxs + aux_statement_list finishi (xi, newxi) statxs (* braces: *) - +> Common.fmap (fun starti -> + +> Common.fmap (fun finishi -> (* subtil: not always return a Some. - * Note that if starti is None, alors forcement ca veut dire + * Note that if finishi is None, alors forcement ca veut dire * qu'il y'a eu un return (ou goto), et donc forcement les * braces auront au moins ete crée une fois, et donc flow_to_ast * marchera. @@ -347,7 +347,12 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = * il faut forcement au moins un return. *) let endi = !g#add_node endnode in - !g#add_arc ((starti, endi), Direct); + if xi.compound_caller = Statement + then + (let afteri = !g +> add_node AfterNode lbl "[after]" in + !g#add_arc ((newi, afteri), Direct); + !g#add_arc ((afteri, endi), Direct)); + !g#add_arc ((finishi, endi), Direct); endi ) @@ -369,23 +374,28 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = in !g +> add_arc_opt (starti, newi); - let ilabel = - try xi.labels_assoc#find s - with Not_found -> + if !Flag_parsing_c.no_gotos + then Some newi + else + begin + let ilabel = + try xi.labels_assoc#find s + with Not_found -> (* jump vers ErrorExit a la place ? * pourquoi tant de "cant jump" ? pas detecté par gcc ? *) - raise (Error (GotoCantFindLabel (s, pinfo_of_ii ii))) - in - (* !g +> add_arc_opt (starti, ilabel); - * todo: special_case: suppose that always goto to toplevel of function, - * hence the Common.init - * todo?: can perhaps report when a goto is not a classic error_goto ? - * that is when it does not jump to the toplevel of the function. - *) - let newi = insert_all_braces (Common.list_init xi.braces) newi in - !g#add_arc ((newi, ilabel), Direct); - None + raise (Error (GotoCantFindLabel (s, pinfo_of_ii ii))) + in + (* !g +> add_arc_opt (starti, ilabel); + * todo: special_case: suppose that always goto to toplevel of + * function, hence the Common.init + * todo?: can perhaps report when a goto is not a classic error_goto ? + * that is when it does not jump to the toplevel of the function. + *) + let newi = insert_all_braces (Common.list_init xi.braces) newi in + !g#add_arc ((newi, ilabel), Direct); + None + end | Jump (Ast_c.GotoComputed e) -> raise (Error (ComputedGoto)) @@ -431,7 +441,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = let iist2 = Ast_c.get_ii_st_take_care st2 in (match Ast_c.unwrap_st st2 with | Ast_c.ExprStatement (None) when null iist2 -> - (* sometome can have ExprStatement None but it is a if-then-else, + (* sometime can have ExprStatement None but it is a if-then-else, * because something like if() xx else ; * so must force to have [] in the ii associated with ExprStatement *) @@ -700,7 +710,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = !g +> add_arc_opt (starti, newi); let newfakethen = !g +> add_node InLoopNode lbl "[whiletrue]" in (* let newfakeelse = !g +> add_node FalseNode lbl "[endwhile]" in *) - let newafter = !g +> add_node FallThroughNode lbl "[whilefall]" in + let newafter = !g +> add_node LoopFallThroughNode lbl "[whilefall]" in let newfakeelse = !g +> add_node (EndStatement (Some iifakeend)) lbl "[endwhile]" in @@ -749,13 +759,17 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = let newfakeelse = !g +> add_node (EndStatement (Some iifakeend)) lbl "[enddowhile]" in + let afteri = !g +> add_node AfterNode lbl "[after]" in + !g#add_arc ((doi,afteri), Direct); + !g#add_arc ((afteri,newfakeelse), Direct); + let newxi = { xi_lbl with ctx = LoopInfo (taili, newfakeelse, xi_lbl.braces, lbl); ctx_stack = xi_lbl.ctx::xi_lbl.ctx_stack } in - if not is_zero && not !Flag_parsing_c.no_loops + if not is_zero && (not !Flag_parsing_c.no_loops) then begin let newfakethen = !g +> add_node InLoopNode lbl "[dowhiletrue]" in !g#add_arc ((taili, newfakethen), Direct); @@ -788,7 +802,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = !g +> add_arc_opt (starti, newi); let newfakethen = !g +> add_node InLoopNode lbl "[fortrue]" in (*let newfakeelse = !g +> add_node FalseNode lbl "[endfor]" in*) - let newafter = !g +> add_node FallThroughNode lbl "[forfall]" in + let newafter = !g +> add_node LoopFallThroughNode lbl "[forfall]" in let newfakeelse = !g +> add_node (EndStatement (Some iifakeend)) lbl "[endfor]" in @@ -803,7 +817,8 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = !g#add_arc ((newi, newafter), Direct); let finalthen = aux_statement (Some newfakethen, newxi) st in !g +> add_arc_opt - (finalthen, if !Flag_parsing_c.no_loops then newafter else newi); + (finalthen, + if !Flag_parsing_c.no_loops then newafter else newi); Some newfakeelse @@ -824,7 +839,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = !g +> add_arc_opt (starti, newi); let newfakethen = !g +> add_node InLoopNode lbl "[fortrue]" in (*let newfakeelse = !g +> add_node FalseNode lbl "[endfor]" in*) - let newafter = !g +> add_node FallThroughNode lbl "[foreachfall]" in + let newafter = !g +> add_node LoopFallThroughNode lbl "[foreachfall]" in let newfakeelse = !g +> add_node (EndStatement (Some iifakeend)) lbl "[endforeach]" in @@ -839,7 +854,8 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = !g#add_arc ((newi, newafter), Direct); let finalthen = aux_statement (Some newfakethen, newxi) st in !g +> add_arc_opt - (finalthen, if !Flag_parsing_c.no_loops then newafter else newi); + (finalthen, + if !Flag_parsing_c.no_loops then newafter else newi); Some newfakeelse @@ -893,7 +909,10 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = let desti = (match x with | Ast_c.Break -> loopendi - | Ast_c.Continue -> loopstarti + | Ast_c.Continue -> + (* if no loops, then continue behaves like break - just + one iteration *) + if !Flag_parsing_c.no_loops then loopendi else loopstarti | x -> raise Impossible ) in let difference = List.length xi.braces - List.length braces in @@ -1030,6 +1049,17 @@ and aux_statement_list starti (xi, newxi) statxs = !g +> add_arc_opt (finalthen, taili); ) in + +(* + This is an attempt to let a statement metavariable match this + construct, but it doesn't work because #ifdef is not a statement. + Not sure if this is a good or bad thing, at least if there is no else + because then no statement might be there. + let afteri = !g +> add_node AfterNode newxi'.labels "[after]" in + !g#add_arc ((newi, afteri), Direct); + !g#add_arc ((afteri, taili), Direct); +*) + Some taili ) starti @@ -1116,7 +1146,7 @@ let specialdeclmacro_to_stmt (s, args, ii) = -let ast_to_control_flow e = +let ast_to_control_flow e = (* globals (re)initialialisation *) g := (new ograph_mutable); @@ -1260,8 +1290,7 @@ let annotate_loop_nodes g = let node = g#nodes#find yi in let ((node2, nodeinfo), nodestr) = node in let node' = ((node2, {nodeinfo with is_loop = true}), (nodestr ^ "*")) - in - g#replace_node (yi, node'); + in g#replace_node (yi, node'); ); ); diff --git a/parsing_c/flag_parsing_c.ml b/parsing_c/flag_parsing_c.ml index 9c49c79..2f920b2 100644 --- a/parsing_c/flag_parsing_c.ml +++ b/parsing_c/flag_parsing_c.ml @@ -254,3 +254,4 @@ let set_smpl_spacing _ = spacing := SMPL (*use spacing from the SP*) (* drop back edges made by proper loop constructs - unsafe but more efficient *) let no_loops = ref false +let no_gotos = ref false diff --git a/parsing_c/lib_parsing_c.ml b/parsing_c/lib_parsing_c.ml index be6d188..728b0a9 100644 --- a/parsing_c/lib_parsing_c.ml +++ b/parsing_c/lib_parsing_c.ml @@ -248,7 +248,8 @@ let max_min_by_pos xs = let lin_col_by_pos xs = (* put min before max; no idea why they are backwards above *) - let (i2, i1) = max_min_ii_by_pos xs in + let non_fake = List.filter (function ii -> not (Ast_c.is_fake ii)) xs in + let (i2, i1) = max_min_ii_by_pos non_fake in let posf x = Ast_c.col_of_info x in let mposf x = Ast_c.col_of_info x + String.length (Ast_c.str_of_info x) in (Ast_c.file_of_info i1,!Flag.current_element, diff --git a/parsing_c/parse_c.ml b/parsing_c/parse_c.ml index 97546c6..00a8033 100644 --- a/parsing_c/parse_c.ml +++ b/parsing_c/parse_c.ml @@ -253,7 +253,7 @@ let tokens2 file = let time_lexing ?(profile=true) a = if profile then Common.profile_code_exclusif "LEXING" (fun () -> tokens2 a) - else tokens2 a + else tokens2 a let tokens ?profile a = Common.profile_code "C parsing.tokens" (fun () -> time_lexing ?profile a) diff --git a/parsing_c/parsing_consistency_c.ml b/parsing_c/parsing_consistency_c.ml index 8a5c432..21eb83d 100644 --- a/parsing_c/parsing_consistency_c.ml +++ b/parsing_c/parsing_consistency_c.ml @@ -114,8 +114,8 @@ let consistency_checking2 xs = stat +> Hashtbl.iter (fun k v -> let xs = Common.hash_to_list v in if List.length xs >= 2 - then begin - pr2_err ("CONFLICT:" ^ k); + then begin + pr2_err ("TYPEDEF CONFLICT:" ^ k); let sorted = xs +> List.sort (fun (ka,va) (kb,vb) -> if !va =|= !vb then (match ka, kb with @@ -130,6 +130,8 @@ let consistency_checking2 xs = | [CTypedef, i1;CIdent, i2] -> pr2_err ("transforming some ident in typedef"); push2 k ident_to_type; + | [CIdent, i1;CTypedef, i2] -> + pr2_err ("TODO:typedef now used as an identifier"); | _ -> pr2_err ("TODO:other transforming?"); diff --git a/parsing_c/parsing_hacks.ml b/parsing_c/parsing_hacks.ml index fdc5a97..ad2bede 100644 --- a/parsing_c/parsing_hacks.ml +++ b/parsing_c/parsing_hacks.ml @@ -1442,24 +1442,20 @@ and find_actions_params xxs = (* ------------------------------------------------------------------------- *) let filter_cpp_stuff xs = - let rec aux xs = - match xs with - | [] -> [] - | x::xs -> - (match x.tok with - | tok when TH.is_comment tok -> aux xs + List.filter + (function x -> + (match x.tok with + | tok when TH.is_comment tok -> false (* don't want drop the define, or if drop, have to drop * also its body otherwise the line heuristics may be lost * by not finding the TDefine in column 0 but by finding * a TDefineIdent in a column > 0 *) - | Parser_c.TDefine _ -> - x::aux xs - | tok when TH.is_cpp_instruction tok -> aux xs - | _ -> x::aux xs - ) - in - aux xs + | Parser_c.TDefine _ -> true + | tok when TH.is_cpp_instruction tok -> false + | _ -> true + )) + xs let insert_virtual_positions l = let strlen x = String.length (Ast_c.str_of_info x) in @@ -1552,8 +1548,6 @@ let fix_tokens_cpp2 ~macro_defs tokens = let brace_grouped = TV.mk_braceised cleaner in set_context_tag brace_grouped; - - (* macro *) let cleaner = !tokens2 +> filter_cpp_stuff in diff --git a/parsing_c/pretty_print_c.ml b/parsing_c/pretty_print_c.ml index b277f65..c37ceeb 100644 --- a/parsing_c/pretty_print_c.ml +++ b/parsing_c/pretty_print_c.ml @@ -110,7 +110,12 @@ let mk_pretty_printers | RecordPtAccess (e, name), [i1] -> pp_expression e; pr_elem i1; pp_name name; - | SizeOfExpr (e), [i] -> pr_elem i; pp_expression e + | SizeOfExpr (e), [i] -> + pr_elem i; + (match Ast_c.unwrap e with + ParenExpr (e), _ -> () + | _ -> pr_space()); + pp_expression e | SizeOfType (t), [i1;i2;i3] -> pr_elem i1; pr_elem i2; pp_type t; pr_elem i3 | Cast (t, e), [i1;i2] -> @@ -1266,8 +1271,8 @@ and pp_init (init, iinit) = | (F.TopNode|F.EndNode| - F.ErrorExit|F.Exit|F.Enter| - F.FallThroughNode|F.AfterNode|F.FalseNode|F.TrueNode|F.InLoopNode| + F.ErrorExit|F.Exit|F.Enter|F.LoopFallThroughNode|F.FallThroughNode| + F.AfterNode|F.FalseNode|F.TrueNode|F.InLoopNode| F.Fake) -> pr2 "YYY" in diff --git a/parsing_c/test_parsing_c.ml b/parsing_c/test_parsing_c.ml index ae22ae1..482ce1b 100644 --- a/parsing_c/test_parsing_c.ml +++ b/parsing_c/test_parsing_c.ml @@ -72,7 +72,8 @@ let test_parse_gen xs ext = then Hashtbl.add newscore file (Common.Ok) else Hashtbl.add newscore file (Common.Pb s) ); - + +(* uses an explicit path; to fix dirname_opt +> Common.do_option (fun dirname -> pr2_xxxxxxxxxxxxxxxxx(); pr2 "regression testing information"; @@ -80,10 +81,14 @@ let test_parse_gen xs ext = let str = Str.global_replace (Str.regexp "/") "__" dirname in let def = if !Flag_parsing_c.filter_define_error then "_def_" else "" in let ext = if ext =$= "c" then "" else ext in - Common.regression_testing newscore - (Filename.concat score_path - ("score_parsing__" ^str ^ def ^ ext ^ ".marshalled")) + let filename = "score_parsing__" ^str ^ def ^ ext ^ ".marshalled" in + if Sys.file_exists filename + then + Common.regression_testing newscore + (Filename.concat score_path + ("score_parsing__" ^str ^ def ^ ext ^ ".marshalled")) ); +*) if not (null !stat_list) then begin diff --git a/parsing_c/token_views_c.ml b/parsing_c/token_views_c.ml index 6b3a4fb..54bc510 100644 --- a/parsing_c/token_views_c.ml +++ b/parsing_c/token_views_c.ml @@ -135,16 +135,17 @@ type body_function_grouped = * part of a mid-ifdef-expression. *) let rec mk_parenthised xs = - match xs with - | [] -> [] + let rec loop acc = function + | [] -> acc | x::xs -> (match x.tok with | TOPar _ | TOParDefine _ -> let body, extras, xs = mk_parameters [x] [] xs in - Parenthised (body,extras)::mk_parenthised xs + loop (Parenthised (body,extras)::acc) xs | _ -> - PToken x::mk_parenthised xs - ) + loop (PToken x::acc) xs + ) in + List.rev(loop [] xs) (* return the body of the parenthised expression and the rest of the tokens *) and mk_parameters extras acc_before_sep xs = @@ -178,19 +179,19 @@ and mk_parameters extras acc_before_sep xs = let rec mk_braceised xs = - match xs with - | [] -> [] - | x::xs -> - (match x.tok with - | TOBrace _ -> - let body, endbrace, xs = mk_braceised_aux [] xs in - Braceised (body, x, endbrace)::mk_braceised xs - | TCBrace _ -> - pr2 "PB: found closing brace alone in fuzzy parsing"; - BToken x::mk_braceised xs - | _ -> - BToken x::mk_braceised xs - ) + let rec loop acc = function + | [] -> acc + | x::xs -> + (match x.tok with + | TOBrace _ -> + let body, endbrace, xs = mk_braceised_aux [] xs in + loop (Braceised (body, x, endbrace)::acc) xs + | TCBrace _ -> + pr2 "PB: found closing brace alone in fuzzy parsing"; + loop (BToken x::acc) xs + | _ -> + loop (BToken x::acc) xs) in + List.rev(loop [] xs) (* return the body of the parenthised expression and the rest of the tokens *) and mk_braceised_aux acc xs = diff --git a/parsing_c/type_annoter_c.ml b/parsing_c/type_annoter_c.ml index 8b68eb8..105523e 100644 --- a/parsing_c/type_annoter_c.ml +++ b/parsing_c/type_annoter_c.ml @@ -920,7 +920,7 @@ let annotater_expr_visitor_subpart = (fun (k,bigf) expr -> (* todo *) | StatementExpr _ -> k expr; (* recurse to set the types-ref of sub expressions *) - pr2_once "Type annotater:not handling GetRefLabel"; + pr2_once "Type annotater:not handling StatementExpr"; Type_c.noTypeHere (* | _ -> k expr; Type_c.noTypeHere @@ -1005,15 +1005,18 @@ let rec visit_toplevel ~just_add_in_env ~depth elem = *) | DefineExpr expr -> - if is_simple_expr expr + (* prevent macro-declared variables from leaking out *) + do_in_new_scope (fun () -> + if is_simple_expr expr (* even if not need_annotate_body, still recurse*) - then k directive - else - if need_annotate_body - then k directive; + then k directive + else + if need_annotate_body + then k directive) | _ -> - if need_annotate_body - then k directive; + do_in_new_scope (fun () -> + if need_annotate_body + then k directive) ); add_binding (Macro (s, (defkind, defval) )) true; diff --git a/parsing_c/unparse_c.ml b/parsing_c/unparse_c.ml index 6d0dc04..97b03b2 100644 --- a/parsing_c/unparse_c.ml +++ b/parsing_c/unparse_c.ml @@ -158,7 +158,7 @@ let mcode_contain_plus = function (* patch: when need full coccinelle transformation *) | Ast_cocci.MINUS (_,_,_,[]) -> false | Ast_cocci.MINUS (_,_,_,x::xs) -> true - | Ast_cocci.PLUS -> raise Impossible + | Ast_cocci.PLUS _ -> raise Impossible let contain_plus info = let mck = Ast_c.mcode_of_info info in @@ -405,18 +405,18 @@ let expand_mcode toks = (match any_befaft with | Ast_cocci.NOTHING -> add_elem t Ctx - | Ast_cocci.BEFORE xxs -> + | Ast_cocci.BEFORE (xxs,_) -> unparser xxs Unparse_cocci.Before; add_elem t Ctx - | Ast_cocci.AFTER xxs -> + | Ast_cocci.AFTER (xxs,_) -> add_elem t Ctx; unparser xxs Unparse_cocci.After; - | Ast_cocci.BEFOREAFTER (xxs, yys) -> + | Ast_cocci.BEFOREAFTER (xxs, yys, _) -> unparser xxs Unparse_cocci.Before; add_elem t Ctx; unparser yys Unparse_cocci.After; ) - | Ast_cocci.PLUS -> raise Impossible + | Ast_cocci.PLUS _ -> raise Impossible in diff --git a/parsing_c/unparse_cocci.ml b/parsing_c/unparse_cocci.ml index 02853d1..b974d4a 100644 --- a/parsing_c/unparse_cocci.ml +++ b/parsing_c/unparse_cocci.ml @@ -3,18 +3,18 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License (GPL) * version 2 as published by the Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * file license.txt for more details. - * + * * This file was part of Coccinelle. *) open Common (*****************************************************************************) -(* mostly a copy paste of parsing_cocci/pretty_print_cocci.ml +(* mostly a copy paste of parsing_cocci/pretty_print_cocci.ml * todo?: try to factorize ? *) (*****************************************************************************) @@ -23,8 +23,8 @@ module Ast = Ast_cocci let term s = Ast.unwrap_mcode s -(* or perhaps can have in plus, for instance a Disj, but those Disj must be - * handled by interactive tool (by proposing alternatives) +(* or perhaps can have in plus, for instance a Disj, but those Disj must be + * handled by interactive tool (by proposing alternatives) *) exception CantBeInPlus @@ -34,7 +34,7 @@ type pos = Before | After | InPlace let unknown = -1 -let rec pp_list_list_any +let rec do_all (env, pr, pr_celem, pr_cspace, pr_space, pr_arity, pr_barrier, indent, unindent) generating xxs before = @@ -98,9 +98,9 @@ and print_anything_list = function let print_around printer term = function Ast.NOTHING -> printer term - | Ast.BEFORE(bef) -> print_anything bef; printer term - | Ast.AFTER(aft) -> printer term; print_anything aft - | Ast.BEFOREAFTER(bef,aft) -> + | Ast.BEFORE(bef,_) -> print_anything bef; printer term + | Ast.AFTER(aft,_) -> printer term; print_anything aft + | Ast.BEFOREAFTER(bef,aft,_) -> print_anything bef; printer term; print_anything aft in let print_string_befaft fn fn1 x info = @@ -163,10 +163,14 @@ let mcode fn (s,info,mc,pos) = | (true, Ast.CONTEXT(_,plus_streams)) -> let fn s = force_newline(); fn s line lcol; print_pos pos in print_around fn s plus_streams - | (true,Ast.PLUS) -> + | (true,Ast.PLUS Ast.ONE) -> let fn s = force_newline(); print_text "+ "; fn s line lcol; print_pos pos in print_string_befaft fn (function _ -> print_text "+ ") s info + | (true,Ast.PLUS Ast.MANY) -> + let fn s = + force_newline(); print_text "++ "; fn s line lcol; print_pos pos in + print_string_befaft fn (function _ -> print_text "++ ") s info in @@ -227,25 +231,25 @@ in let rec ident i = match Ast.unwrap i with - Ast.Id(name) -> mcode print_string name - | Ast.MetaId(name,_,_,_) -> - handle_metavar name (function - | (Ast_c.MetaIdVal id) -> print_text id - | _ -> raise Impossible - ) - | Ast.MetaFunc(name,_,_,_) -> - handle_metavar name (function - | (Ast_c.MetaFuncVal id) -> print_text id - | _ -> raise Impossible - ) - | Ast.MetaLocalFunc(name,_,_,_) -> - handle_metavar name (function - | (Ast_c.MetaLocalFuncVal id) -> print_text id - | _ -> raise Impossible - ) - - | Ast.OptIdent(_) | Ast.UniqueIdent(_) -> - raise CantBeInPlus + Ast.Id(name) -> mcode print_string name + | Ast.MetaId(name,_,_,_) -> + handle_metavar name (function + | (Ast_c.MetaIdVal id) -> print_text id + | _ -> raise Impossible + ) + | Ast.MetaFunc(name,_,_,_) -> + handle_metavar name (function + | (Ast_c.MetaFuncVal id) -> print_text id + | _ -> raise Impossible + ) + | Ast.MetaLocalFunc(name,_,_,_) -> + handle_metavar name (function + | (Ast_c.MetaLocalFuncVal id) -> print_text id + | _ -> raise Impossible + ) + + | Ast.OptIdent(_) | Ast.UniqueIdent(_) -> + raise CantBeInPlus in @@ -1049,3 +1053,12 @@ in (* print a newline at the end, if needed *) newline_after() +let rec pp_list_list_any (envs, pr, pr_celem, pr_cspace, pr_space, pr_arity, + pr_barrier, indent, unindent) + generating xxs before = + List.iter + (function env -> + do_all (env, pr, pr_celem, pr_cspace, pr_space, pr_arity, pr_barrier, + indent, unindent) + generating xxs before) + envs diff --git a/parsing_c/unparse_cocci.mli b/parsing_c/unparse_cocci.mli index 2d64261..cf9735f 100644 --- a/parsing_c/unparse_cocci.mli +++ b/parsing_c/unparse_cocci.mli @@ -3,7 +3,7 @@ exception CantBeInPlus type pos = Before | After | InPlace val pp_list_list_any : - Ast_c.metavars_binding * + Ast_c.metavars_binding list * (* pr cocci *) (string -> int (*line*) -> int (*lcol*) -> int (*rcol*) -> unit) * (Ast_c.info -> unit) (* pr c *) * diff --git a/parsing_c/unparse_hrule.ml b/parsing_c/unparse_hrule.ml index 6bbfb53..296495c 100644 --- a/parsing_c/unparse_hrule.ml +++ b/parsing_c/unparse_hrule.ml @@ -94,12 +94,12 @@ let get_function_name rule env = Ast.MINUS(_,_,_,any_list_list) -> do_any_list_list r any_list_list | Ast.CONTEXT(_,any_befaft) -> (match any_befaft with - Ast.BEFORE(any_list_list) | Ast.AFTER(any_list_list) -> + Ast.BEFORE(any_list_list,_) | Ast.AFTER(any_list_list,_) -> do_any_list_list r any_list_list - | Ast.BEFOREAFTER(ba,aa) -> + | Ast.BEFOREAFTER(ba,aa,_) -> bind (do_any_list_list r ba) (do_any_list_list r aa) | Ast.NOTHING -> []) - | Ast.PLUS -> [] in + | Ast.PLUS _ -> [] in let expression r k e = bind (k e) (match Ast.unwrap e with @@ -108,8 +108,8 @@ let get_function_name rule env = [e] -> (match Ast.unwrap e with Ast.MetaExprList(nm,_,_,_) -> - (match Ast.unwrap_mcode nm with - (_,"ARGS") when Ast.get_mcodekind nm = Ast.PLUS -> + (match (Ast.unwrap_mcode nm,Ast.get_mcodekind nm) with + ((_,"ARGS"), Ast.PLUS _) -> (match Ast.unwrap fn with Ast.Ident(id) -> (match Ast.unwrap id with @@ -475,7 +475,7 @@ let pp_rule local_metas ast env srcfile = error rule "not an abstract line" in let pr_space _ = pr " " in Unparse_cocci.pp_list_list_any - (env, (fun s _ _ _ -> pr s), pr_c, pr_space, pr_space, pr, + ([env], (fun s _ _ _ -> pr s), pr_c, pr_space, pr_space, pr, (fun _ _ -> ()), (function _ -> ()), (function _ -> ())) true printable Unparse_cocci.InPlace; print_end pr; diff --git a/parsing_c/visitor_c.ml b/parsing_c/visitor_c.ml index c7a8332..fdd97fa 100644 --- a/parsing_c/visitor_c.ml +++ b/parsing_c/visitor_c.ml @@ -228,7 +228,7 @@ let test = * Note that I don't visit necesserally in the order of the token * found in the original file. So don't assume such hypothesis! * - * todo? parameter ? onedecl ? + * todo? parameter ? *) type visitor_c = { @@ -237,6 +237,8 @@ type visitor_c = ktype: (fullType -> unit) * visitor_c -> fullType -> unit; kdecl: (declaration -> unit) * visitor_c -> declaration -> unit; + konedecl: (onedecl -> unit) * visitor_c -> onedecl -> unit; + kparam: (parameterType -> unit) * visitor_c -> parameterType -> unit; kdef: (definition -> unit) * visitor_c -> definition -> unit; kname : (name -> unit) * visitor_c -> name -> unit; @@ -261,6 +263,8 @@ let default_visitor_c = kstatement = (fun (k,_) st -> k st); ktype = (fun (k,_) t -> k t); kdecl = (fun (k,_) d -> k d); + konedecl = (fun (k,_) d -> k d); + kparam = (fun (k,_) d -> k d); kdef = (fun (k,_) d -> k d); kini = (fun (k,_) ie -> k ie); kname = (fun (k,_) x -> k x); @@ -502,6 +506,8 @@ and vk_decl = fun bigf d -> and vk_onedecl = fun bigf onedecl -> let iif ii = vk_ii bigf ii in + let f = bigf.konedecl in + let rec k onedecl = match onedecl with | ({v_namei = var; v_type = t; @@ -519,6 +525,7 @@ and vk_onedecl = fun bigf onedecl -> vk_ini bigf ini; ); ) + in f (k, bigf) onedecl and vk_ini = fun bigf ini -> let iif ii = vk_ii bigf ii in @@ -831,8 +838,8 @@ and vk_node = fun bigf node -> | ( F.TopNode|F.EndNode| - F.ErrorExit|F.Exit|F.Enter| - F.FallThroughNode|F.AfterNode|F.FalseNode|F.TrueNode|F.InLoopNode| + F.ErrorExit|F.Exit|F.Enter|F.LoopFallThroughNode|F.FallThroughNode| + F.AfterNode|F.FalseNode|F.TrueNode|F.InLoopNode| F.Fake ) -> () @@ -873,10 +880,13 @@ and vk_argument_list = fun bigf es -> and vk_param = fun bigf param -> let iif ii = vk_ii bigf ii in - let {p_namei = swrapopt; p_register = (b, iib); p_type=ft} = param in - swrapopt +> Common.do_option (vk_name bigf); - iif iib; - vk_type bigf ft + let f = bigf.kparam in + let rec k param = + let {p_namei = swrapopt; p_register = (b, iib); p_type=ft} = param in + swrapopt +> Common.do_option (vk_name bigf); + iif iib; + vk_type bigf ft + in f (k, bigf) param and vk_param_list = fun bigf ts -> let iif ii = vk_ii bigf ii in @@ -1632,8 +1642,8 @@ and vk_node_s = fun bigf node -> | ( ( F.TopNode|F.EndNode| - F.ErrorExit|F.Exit|F.Enter| - F.FallThroughNode|F.AfterNode|F.FalseNode|F.TrueNode|F.InLoopNode| + F.ErrorExit|F.Exit|F.Enter|F.LoopFallThroughNode|F.FallThroughNode| + F.AfterNode|F.FalseNode|F.TrueNode|F.InLoopNode| F.Fake ) as x) -> x diff --git a/parsing_c/visitor_c.mli b/parsing_c/visitor_c.mli index c724b93..cf50ede 100644 --- a/parsing_c/visitor_c.mli +++ b/parsing_c/visitor_c.mli @@ -6,6 +6,8 @@ type visitor_c = { ktype : (fullType -> unit) * visitor_c -> fullType -> unit; kdecl : (declaration -> unit) * visitor_c -> declaration -> unit; + konedecl : (onedecl -> unit) * visitor_c -> onedecl -> unit; + kparam : (parameterType -> unit) * visitor_c -> parameterType -> unit; kdef : (definition -> unit) * visitor_c -> definition -> unit; kname : (name -> unit) * visitor_c -> name -> unit; diff --git a/parsing_cocci/.depend b/parsing_cocci/.depend index 4c7f9f0..71b8ca0 100644 --- a/parsing_cocci/.depend +++ b/parsing_cocci/.depend @@ -36,10 +36,10 @@ adjacency.cmo: visitor_ast0_types.cmo visitor_ast0.cmi ast0_cocci.cmi \ adjacency.cmi adjacency.cmx: visitor_ast0_types.cmx visitor_ast0.cmx ast0_cocci.cmx \ adjacency.cmi -adjust_pragmas.cmo: visitor_ast0_types.cmo visitor_ast0.cmi ast0_cocci.cmi \ - adjust_pragmas.cmi -adjust_pragmas.cmx: visitor_ast0_types.cmx visitor_ast0.cmx ast0_cocci.cmx \ - adjust_pragmas.cmi +adjust_pragmas.cmo: visitor_ast0_types.cmo visitor_ast0.cmi ast_cocci.cmi \ + ast0_cocci.cmi adjust_pragmas.cmi +adjust_pragmas.cmx: visitor_ast0_types.cmx visitor_ast0.cmx ast_cocci.cmx \ + ast0_cocci.cmx adjust_pragmas.cmi arity.cmo: ast_cocci.cmi ast0_cocci.cmi arity.cmi arity.cmx: ast_cocci.cmx ast0_cocci.cmx arity.cmi ast0_cocci.cmo: type_cocci.cmi ../globals/flag.cmo ../commons/common.cmi \ diff --git a/parsing_cocci/Makefile b/parsing_cocci/Makefile index 9522b1e..f783425 100644 --- a/parsing_cocci/Makefile +++ b/parsing_cocci/Makefile @@ -1,19 +1,19 @@ # Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix # This file is part of Coccinelle. -# +# # Coccinelle is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, according to version 2 of the License. -# +# # Coccinelle is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with Coccinelle. If not, see . -# +# # The authors reserve the right to distribute this or future versions of # Coccinelle under other licenses. diff --git a/parsing_cocci/adjacency.ml b/parsing_cocci/adjacency.ml index f41bf41..1cf3e4b 100644 --- a/parsing_cocci/adjacency.ml +++ b/parsing_cocci/adjacency.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module Ast0 = Ast0_cocci diff --git a/parsing_cocci/adjacency.mli b/parsing_cocci/adjacency.mli index f076530..1375027 100644 --- a/parsing_cocci/adjacency.mli +++ b/parsing_cocci/adjacency.mli @@ -1 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val compute_adjacency : Ast0_cocci.rule -> Ast0_cocci.rule diff --git a/parsing_cocci/adjust_pragmas.ml b/parsing_cocci/adjust_pragmas.ml index da0f136..a1a6833 100644 --- a/parsing_cocci/adjust_pragmas.ml +++ b/parsing_cocci/adjust_pragmas.ml @@ -1,29 +1,30 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* Find a directive or comment at the end of a statement. Things with aft given None, because they can accomodate their own directives or comments *) module Ast0 = Ast0_cocci +module Ast = Ast_cocci module V0 = Visitor_ast0 module VT0 = Visitor_ast0_types @@ -34,21 +35,21 @@ let call_right processor data s cont = let left_mcode (a,b,info,mcodekind,d,e) = match (info.Ast0.strings_before,mcodekind) with - ([],_) | (_,Ast0.PLUS) -> None + ([],_) | (_,Ast0.PLUS _) -> None | (l,_) -> Some(l,(a,b,{info with Ast0.strings_before = []},mcodekind,d,e)) let right_mcode (a,b,info,mcodekind,d,e) = match (info.Ast0.strings_after,mcodekind) with - ([],_) | (_,Ast0.PLUS) -> None + ([],_) | (_,Ast0.PLUS _) -> None | (l,_) -> Some(l,(a,b,{info with Ast0.strings_after = []},mcodekind,d,e)) let update_before pragmas (info,x) = ({info with Ast0.strings_before = pragmas @ info.Ast0.strings_before}, - Ast0.PLUS) + Ast0.PLUS Ast.ONE) (* not sure what the arg should be... one seems safe *) let update_after pragmas (info,x) = ({info with Ast0.strings_after = info.Ast0.strings_after @ pragmas}, - Ast0.PLUS) + Ast0.PLUS Ast.ONE) (* not sure what the arg should be... one seems safe *) let rec right_decl d = match Ast0.unwrap d with @@ -200,22 +201,22 @@ let rec left_ty t = let rec left_ident i = match Ast0.unwrap i with - Ast0.Id(name) -> - call_right left_mcode name i - (function name -> Ast0.Id(name)) - | Ast0.MetaId(name,a,b) -> - call_right left_mcode name i - (function name -> Ast0.MetaId(name,a,b)) - | Ast0.MetaFunc(name,a,b) -> - call_right left_mcode name i - (function name -> Ast0.MetaFunc(name,a,b)) - | Ast0.MetaLocalFunc(name,a,b) -> - call_right left_mcode name i - (function name -> Ast0.MetaLocalFunc(name,a,b)) - | Ast0.OptIdent(id) -> - call_right left_ident id i (function id -> Ast0.OptIdent(id)) - | Ast0.UniqueIdent(id) -> - call_right left_ident id i (function id -> Ast0.UniqueIdent(id)) + Ast0.Id(name) -> + call_right left_mcode name i + (function name -> Ast0.Id(name)) + | Ast0.MetaId(name,a,b) -> + call_right left_mcode name i + (function name -> Ast0.MetaId(name,a,b)) + | Ast0.MetaFunc(name,a,b) -> + call_right left_mcode name i + (function name -> Ast0.MetaFunc(name,a,b)) + | Ast0.MetaLocalFunc(name,a,b) -> + call_right left_mcode name i + (function name -> Ast0.MetaLocalFunc(name,a,b)) + | Ast0.OptIdent(id) -> + call_right left_ident id i (function id -> Ast0.OptIdent(id)) + | Ast0.UniqueIdent(id) -> + call_right left_ident id i (function id -> Ast0.UniqueIdent(id)) let left_fundecl name fninfo = let fncall_right processor data cont = diff --git a/parsing_cocci/adjust_pragmas.mli b/parsing_cocci/adjust_pragmas.mli index b87cd1a..8392a90 100644 --- a/parsing_cocci/adjust_pragmas.mli +++ b/parsing_cocci/adjust_pragmas.mli @@ -1 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val process : Ast0_cocci.rule -> Ast0_cocci.rule diff --git a/parsing_cocci/arity.ml b/parsing_cocci/arity.ml index bcb5114..47a896a 100644 --- a/parsing_cocci/arity.ml +++ b/parsing_cocci/arity.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* Arities matter for the minus slice, but not for the plus slice. *) @@ -155,32 +155,32 @@ let make_id = let ident opt_allowed tgt i = match Ast0.unwrap i with - Ast0.Id(name) -> - let arity = - all_same opt_allowed tgt (mcode2line name) - [mcode2arity name] in - let name = mcode name in - make_id i tgt arity (Ast0.Id(name)) - | Ast0.MetaId(name,constraints,pure) -> - let arity = - all_same opt_allowed tgt (mcode2line name) - [mcode2arity name] in - let name = mcode name in - make_id i tgt arity (Ast0.MetaId(name,constraints,pure)) - | Ast0.MetaFunc(name,constraints,pure) -> - let arity = - all_same opt_allowed tgt (mcode2line name) - [mcode2arity name] in - let name = mcode name in - make_id i tgt arity (Ast0.MetaFunc(name,constraints,pure)) - | Ast0.MetaLocalFunc(name,constraints,pure) -> - let arity = - all_same opt_allowed tgt (mcode2line name) - [mcode2arity name] in - let name = mcode name in - make_id i tgt arity (Ast0.MetaLocalFunc(name,constraints,pure)) - | Ast0.OptIdent(_) | Ast0.UniqueIdent(_) -> - failwith "unexpected code" + Ast0.Id(name) -> + let arity = + all_same opt_allowed tgt (mcode2line name) + [mcode2arity name] in + let name = mcode name in + make_id i tgt arity (Ast0.Id(name)) + | Ast0.MetaId(name,constraints,pure) -> + let arity = + all_same opt_allowed tgt (mcode2line name) + [mcode2arity name] in + let name = mcode name in + make_id i tgt arity (Ast0.MetaId(name,constraints,pure)) + | Ast0.MetaFunc(name,constraints,pure) -> + let arity = + all_same opt_allowed tgt (mcode2line name) + [mcode2arity name] in + let name = mcode name in + make_id i tgt arity (Ast0.MetaFunc(name,constraints,pure)) + | Ast0.MetaLocalFunc(name,constraints,pure) -> + let arity = + all_same opt_allowed tgt (mcode2line name) + [mcode2arity name] in + let name = mcode name in + make_id i tgt arity (Ast0.MetaLocalFunc(name,constraints,pure)) + | Ast0.OptIdent(_) | Ast0.UniqueIdent(_) -> + failwith "unexpected code" (* --------------------------------------------------------------------- *) (* Expression *) diff --git a/parsing_cocci/arity.mli b/parsing_cocci/arity.mli index cd64e1e..e274276 100644 --- a/parsing_cocci/arity.mli +++ b/parsing_cocci/arity.mli @@ -1 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val minus_arity : Ast0_cocci.rule -> Ast0_cocci.rule diff --git a/parsing_cocci/ast0_cocci.ml b/parsing_cocci/ast0_cocci.ml index 2fe1d7e..850afbb 100644 --- a/parsing_cocci/ast0_cocci.ml +++ b/parsing_cocci/ast0_cocci.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module Ast = Ast_cocci @@ -35,9 +35,11 @@ let default_token_info = (* MIXED is like CONTEXT, since sometimes MIXED things have to revert to CONTEXT - see insert_plus.ml *) +type count = ONE (* + *) | MANY (* ++ *) + type mcodekind = MINUS of (Ast.anything list list * token_info) ref - | PLUS + | PLUS of Ast.count | CONTEXT of (Ast.anything Ast.befaft * token_info * token_info) ref | MIXED of (Ast.anything Ast.befaft * token_info * token_info) ref @@ -98,10 +100,10 @@ and 'a dots = 'a base_dots wrap (* Identifier *) and base_ident = - Id of string mcode - | MetaId of Ast.meta_name mcode * ident list * pure - | MetaFunc of Ast.meta_name mcode * ident list * pure - | MetaLocalFunc of Ast.meta_name mcode * ident list * pure + Id of string mcode + | MetaId of Ast.meta_name mcode * Ast.idconstraint * pure + | MetaFunc of Ast.meta_name mcode * Ast.idconstraint * pure + | MetaLocalFunc of Ast.meta_name mcode * Ast.idconstraint * pure | OptIdent of ident | UniqueIdent of ident @@ -136,8 +138,8 @@ and base_expression = | SizeOfType of string mcode (* sizeof *) * string mcode (* ( *) * typeC * string mcode (* ) *) | TypeExp of typeC (* type name used as an expression, only in args *) - | MetaErr of Ast.meta_name mcode * expression list * pure - | MetaExpr of Ast.meta_name mcode * expression list * + | MetaErr of Ast.meta_name mcode * constraints * pure + | MetaExpr of Ast.meta_name mcode * constraints * Type_cocci.typeC list option * Ast.form * pure | MetaExprList of Ast.meta_name mcode (* only in arg lists *) * listlen * pure @@ -154,6 +156,11 @@ and base_expression = and expression = base_expression wrap +and constraints = + NoConstraint + | NotIdCstrt of Ast.idconstraint + | NotExpCstrt of expression list + and listlen = Ast.meta_name mcode option (* --------------------------------------------------------------------- *) @@ -631,7 +638,7 @@ let rec reverse_type ty = (* not right... *) EnumName (make_mcode "enum", - context_wrap(MetaId(make_mcode ("",tag),[],Impure))) + context_wrap(MetaId(make_mcode ("",tag),Ast.IdNoConstraint,Impure))) else EnumName(make_mcode "enum",context_wrap(Id(make_mcode tag))) | Type_cocci.StructUnionName(su,mv,tag) -> @@ -640,7 +647,7 @@ let rec reverse_type ty = (* not right... *) StructUnionName (reverse_structUnion su, - Some(context_wrap(MetaId(make_mcode ("",tag),[],Impure)))) + Some(context_wrap(MetaId(make_mcode ("",tag),Ast.IdNoConstraint,Impure)))) else StructUnionName (reverse_structUnion su, diff --git a/parsing_cocci/ast0_cocci.mli b/parsing_cocci/ast0_cocci.mli index 6ee8678..a1801cf 100644 --- a/parsing_cocci/ast0_cocci.mli +++ b/parsing_cocci/ast0_cocci.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + (* --------------------------------------------------------------------- *) (* Modified code *) @@ -10,7 +32,7 @@ val default_token_info : token_info type mcodekind = MINUS of (Ast_cocci.anything list list * token_info) ref - | PLUS + | PLUS of Ast_cocci.count | CONTEXT of (Ast_cocci.anything Ast_cocci.befaft * token_info * token_info) ref | MIXED of (Ast_cocci.anything Ast_cocci.befaft * @@ -68,10 +90,10 @@ and 'a dots = 'a base_dots wrap (* Identifier *) and base_ident = - Id of string mcode - | MetaId of Ast_cocci.meta_name mcode * ident list * pure - | MetaFunc of Ast_cocci.meta_name mcode * ident list * pure - | MetaLocalFunc of Ast_cocci.meta_name mcode * ident list * pure + Id of string mcode + | MetaId of Ast_cocci.meta_name mcode * Ast_cocci.idconstraint * pure + | MetaFunc of Ast_cocci.meta_name mcode * Ast_cocci.idconstraint * pure + | MetaLocalFunc of Ast_cocci.meta_name mcode * Ast_cocci.idconstraint * pure | OptIdent of ident | UniqueIdent of ident @@ -106,8 +128,8 @@ and base_expression = | SizeOfType of string mcode (* sizeof *) * string mcode (* ( *) * typeC * string mcode (* ) *) | TypeExp of typeC - | MetaErr of Ast_cocci.meta_name mcode * expression list * pure - | MetaExpr of Ast_cocci.meta_name mcode * expression list * + | MetaErr of Ast_cocci.meta_name mcode * constraints * pure + | MetaExpr of Ast_cocci.meta_name mcode * constraints * Type_cocci.typeC list option * Ast_cocci.form * pure | MetaExprList of Ast_cocci.meta_name mcode (* only in arglists *) * listlen * pure @@ -124,6 +146,11 @@ and base_expression = and expression = base_expression wrap +and constraints = + NoConstraint + | NotIdCstrt of Ast_cocci.idconstraint + | NotExpCstrt of expression list + and listlen = Ast_cocci.meta_name mcode option (* --------------------------------------------------------------------- *) @@ -366,8 +393,8 @@ and parsed_rule = | ScriptRule of string * Ast_cocci.dependency * (string * Ast_cocci.meta_name) list * string - | InitialScriptRule of string * string - | FinalScriptRule of string * string + | InitialScriptRule of string (*language*) * string (*code*) + | FinalScriptRule of string (*language*) * string (*code*) (* --------------------------------------------------------------------- *) diff --git a/parsing_cocci/ast0toast.ml b/parsing_cocci/ast0toast.ml index 6c2663a..34582a4 100644 --- a/parsing_cocci/ast0toast.ml +++ b/parsing_cocci/ast0toast.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* Arities matter for the minus slice, but not for the plus slice. *) @@ -94,7 +94,7 @@ let inline_mcodes = else starter @ ender in (lst, {endinfo with Ast0.tline_start = startinfo.Ast0.tline_start}) in - let attach_bef bef beforeinfo = function + let attach_bef bef beforeinfo befit = function (true,mcl) -> List.iter (function @@ -103,27 +103,31 @@ let inline_mcodes = mreplacements := concat bef beforeinfo mrepl tokeninfo | Ast0.CONTEXT(mbefaft) -> (match !mbefaft with - (Ast.BEFORE(mbef),mbeforeinfo,a) -> + (Ast.BEFORE(mbef,it),mbeforeinfo,a) -> let (newbef,newinfo) = concat bef beforeinfo mbef mbeforeinfo in - mbefaft := (Ast.BEFORE(newbef),newinfo,a) - | (Ast.AFTER(maft),_,a) -> + let it = Ast.lub_count befit it in + mbefaft := (Ast.BEFORE(newbef,it),newinfo,a) + | (Ast.AFTER(maft,it),_,a) -> + let it = Ast.lub_count befit it in mbefaft := - (Ast.BEFOREAFTER(bef,maft),beforeinfo,a) - | (Ast.BEFOREAFTER(mbef,maft),mbeforeinfo,a) -> + (Ast.BEFOREAFTER(bef,maft,it),beforeinfo,a) + | (Ast.BEFOREAFTER(mbef,maft,it),mbeforeinfo,a) -> let (newbef,newinfo) = concat bef beforeinfo mbef mbeforeinfo in + let it = Ast.lub_count befit it in mbefaft := - (Ast.BEFOREAFTER(newbef,maft),newinfo,a) + (Ast.BEFOREAFTER(newbef,maft,it),newinfo,a) | (Ast.NOTHING,_,a) -> - mbefaft := (Ast.BEFORE(bef),beforeinfo,a)) + mbefaft := + (Ast.BEFORE(bef,befit),beforeinfo,a)) | _ -> failwith "unexpected annotation") mcl | _ -> Printf.printf "before %s\n" (Dumper.dump bef); failwith "context tree should not have bad code before" in - let attach_aft aft afterinfo = function + let attach_aft aft afterinfo aftit = function (true,mcl) -> List.iter (function @@ -132,39 +136,42 @@ let inline_mcodes = mreplacements := concat mrepl tokeninfo aft afterinfo | Ast0.CONTEXT(mbefaft) -> (match !mbefaft with - (Ast.BEFORE(mbef),b,_) -> + (Ast.BEFORE(mbef,it),b,_) -> + let it = Ast.lub_count aftit it in mbefaft := - (Ast.BEFOREAFTER(mbef,aft),b,afterinfo) - | (Ast.AFTER(maft),b,mafterinfo) -> + (Ast.BEFOREAFTER(mbef,aft,it),b,afterinfo) + | (Ast.AFTER(maft,it),b,mafterinfo) -> let (newaft,newinfo) = concat maft mafterinfo aft afterinfo in - mbefaft := (Ast.AFTER(newaft),b,newinfo) - | (Ast.BEFOREAFTER(mbef,maft),b,mafterinfo) -> + let it = Ast.lub_count aftit it in + mbefaft := (Ast.AFTER(newaft,it),b,newinfo) + | (Ast.BEFOREAFTER(mbef,maft,it),b,mafterinfo) -> let (newaft,newinfo) = concat maft mafterinfo aft afterinfo in + let it = Ast.lub_count aftit it in mbefaft := - (Ast.BEFOREAFTER(mbef,newaft),b,newinfo) + (Ast.BEFOREAFTER(mbef,newaft,it),b,newinfo) | (Ast.NOTHING,b,_) -> - mbefaft := (Ast.AFTER(aft),b,afterinfo)) + mbefaft := (Ast.AFTER(aft,aftit),b,afterinfo)) | _ -> failwith "unexpected annotation") mcl | _ -> failwith "context tree should not have bad code after" in (match !befaft with - (Ast.BEFORE(bef),beforeinfo,_) -> - attach_bef bef beforeinfo + (Ast.BEFORE(bef,it),beforeinfo,_) -> + attach_bef bef beforeinfo it (einfo.Ast0.attachable_start,einfo.Ast0.mcode_start) - | (Ast.AFTER(aft),_,afterinfo) -> - attach_aft aft afterinfo + | (Ast.AFTER(aft,it),_,afterinfo) -> + attach_aft aft afterinfo it (einfo.Ast0.attachable_end,einfo.Ast0.mcode_end) - | (Ast.BEFOREAFTER(bef,aft),beforeinfo,afterinfo) -> - attach_bef bef beforeinfo + | (Ast.BEFOREAFTER(bef,aft,it),beforeinfo,afterinfo) -> + attach_bef bef beforeinfo it (einfo.Ast0.attachable_start,einfo.Ast0.mcode_start); - attach_aft aft afterinfo + attach_aft aft afterinfo it (einfo.Ast0.attachable_end,einfo.Ast0.mcode_end) | (Ast.NOTHING,_,_) -> ()) - | Ast0.PLUS -> () in + | Ast0.PLUS _ -> () in V0.flat_combiner bind option_default mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode @@ -249,7 +256,7 @@ let convert_mcodekind adj = function Ast0.MINUS(replacements) -> let (replacements,_) = !replacements in Ast.MINUS(Ast.NoPos,[],adj,replacements) - | Ast0.PLUS -> Ast.PLUS + | Ast0.PLUS count -> Ast.PLUS count | Ast0.CONTEXT(befaft) -> let (befaft,_,_) = !befaft in Ast.CONTEXT(Ast.NoPos,befaft) | Ast0.MIXED(_) -> failwith "not possible for mcode" @@ -296,18 +303,15 @@ let rec do_isos l = List.map (function (nm,x) -> (nm,anything x)) l and ident i = rewrap i (do_isos (Ast0.get_iso i)) (match Ast0.unwrap i with - Ast0.Id(name) -> Ast.Id(mcode name) - | Ast0.MetaId(name,constraints,_) -> - let constraints = List.map ident constraints in - Ast.MetaId(mcode name,constraints,unitary,false) - | Ast0.MetaFunc(name,constraints,_) -> - let constraints = List.map ident constraints in - Ast.MetaFunc(mcode name,constraints,unitary,false) - | Ast0.MetaLocalFunc(name,constraints,_) -> - let constraints = List.map ident constraints in - Ast.MetaLocalFunc(mcode name,constraints,unitary,false) - | Ast0.OptIdent(id) -> Ast.OptIdent(ident id) - | Ast0.UniqueIdent(id) -> Ast.UniqueIdent(ident id)) + Ast0.Id(name) -> Ast.Id(mcode name) + | Ast0.MetaId(name,constraints,_) -> + Ast.MetaId(mcode name,constraints,unitary,false) + | Ast0.MetaFunc(name,constraints,_) -> + Ast.MetaFunc(mcode name,constraints,unitary,false) + | Ast0.MetaLocalFunc(name,constraints,_) -> + Ast.MetaLocalFunc(mcode name,constraints,unitary,false) + | Ast0.OptIdent(id) -> Ast.OptIdent(ident id) + | Ast0.UniqueIdent(id) -> Ast.UniqueIdent(ident id)) (* --------------------------------------------------------------------- *) (* Expression *) @@ -359,12 +363,10 @@ and expression e = | Ast0.SizeOfType(szf,lp,ty,rp) -> Ast.SizeOfType(mcode szf, mcode lp,typeC ty,mcode rp) | Ast0.TypeExp(ty) -> Ast.TypeExp(typeC ty) - | Ast0.MetaErr(name,constraints,_) -> - let constraints = List.map expression constraints in - Ast.MetaErr(mcode name,constraints,unitary,false) - | Ast0.MetaExpr(name,constraints,ty,form,_) -> - let constraints = List.map expression constraints in - Ast.MetaExpr(mcode name,constraints,unitary,ty,form,false) + | Ast0.MetaErr(name,cstrts,_) -> + Ast.MetaErr(mcode name,constraints cstrts,unitary,false) + | Ast0.MetaExpr(name,cstrts,ty,form,_) -> + Ast.MetaExpr(mcode name,constraints cstrts,unitary,ty,form,false) | Ast0.MetaExprList(name,Some lenname,_) -> Ast.MetaExprList(mcode name,Some (mcode lenname,unitary,false), unitary,false) @@ -394,6 +396,12 @@ and expression e = and expression_dots ed = dots expression ed +and constraints c = + match c with + Ast0.NoConstraint -> Ast.NoConstraint + | Ast0.NotIdCstrt idctrt -> Ast.NotIdCstrt idctrt + | Ast0.NotExpCstrt exps -> Ast.NotExpCstrt (List.map expression exps) + (* --------------------------------------------------------------------- *) (* Types *) diff --git a/parsing_cocci/ast0toast.mli b/parsing_cocci/ast0toast.mli index e46dec0..bd17da5 100644 --- a/parsing_cocci/ast0toast.mli +++ b/parsing_cocci/ast0toast.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val ast0toast : string -> Ast_cocci.dependency -> string list (* dropped isos *) -> Ast_cocci.exists -> Ast0_cocci.rule -> bool list -> Ast_cocci.ruletype -> diff --git a/parsing_cocci/ast_cocci.ml b/parsing_cocci/ast_cocci.ml index 6076b9a..ea0e1dc 100644 --- a/parsing_cocci/ast_cocci.ml +++ b/parsing_cocci/ast_cocci.ml @@ -1,24 +1,31 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) - + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* Constraints on Meta-* Identifiers, Functions *) +type idconstraint = + IdNoConstraint + | IdNegIdSet of string list + | IdRegExp of string * Str.regexp + | IdNotRegExp of string * Str.regexp (* --------------------------------------------------------------------- *) (* Modified code *) @@ -46,24 +53,33 @@ type 'a wrap = iso_info : (string*anything) list } and 'a befaft = - BEFORE of 'a list list - | AFTER of 'a list list - | BEFOREAFTER of 'a list list * 'a list list + BEFORE of 'a list list * count + | AFTER of 'a list list * count + | BEFOREAFTER of 'a list list * 'a list list * count | NOTHING and 'a mcode = 'a * info * mcodekind * meta_pos (* pos variable *) - (* pos is an offset indicating where in the C code the mcodekind has an - effect *) -(* int list is the match instances, which are only meaningful in annotated -C code *) -(* int is the adjacency index, which is incremented on context dots *) - and mcodekind = + (* pos is an offset indicating where in the C code the mcodekind + has an effect *) + (* int list is the match instances, which are only meaningful in annotated + C code *) + (* int is the adjacency index, which is incremented on context dots *) +(* iteration is only allowed on contect code, the intuition vaguely being +that there is no way to replace something more than once. Actually, +allowing iterated additions on minus code would cause problems with some +heuristics for adding braces, because one couldn't identify simple +replacements with certainty. Anyway, iteration doesn't seem to be needed +on - code for the moment. Although it may be confusing that there can be +iterated addition of code before context code where the context code is +immediately followed by removed code. *) +and mcodekind = MINUS of pos * int list * int * anything list list | CONTEXT of pos * anything befaft - | PLUS - and fixpos = + | PLUS of count +and count = ONE (* + *) | MANY (* ++ *) +and fixpos = Real of int (* charpos *) | Virt of int * int (* charpos + offset *) - and pos = NoPos | DontCarePos | FixPos of (fixpos * fixpos) +and pos = NoPos | DontCarePos | FixPos of (fixpos * fixpos) and dots_bef_aft = NoDots @@ -127,11 +143,10 @@ and 'a dots = 'a base_dots wrap (* Identifier *) and base_ident = - Id of string mcode - - | MetaId of meta_name mcode * ident list * keep_binding * inherited - | MetaFunc of meta_name mcode * ident list * keep_binding * inherited - | MetaLocalFunc of meta_name mcode * ident list * keep_binding * inherited + Id of string mcode + | MetaId of meta_name mcode * idconstraint * keep_binding * inherited + | MetaFunc of meta_name mcode * idconstraint * keep_binding * inherited + | MetaLocalFunc of meta_name mcode * idconstraint * keep_binding * inherited | OptIdent of ident | UniqueIdent of ident @@ -170,9 +185,9 @@ and base_expression = | Paren of string mcode (* ( *) * expression * string mcode (* ) *) - | MetaErr of meta_name mcode * expression list * keep_binding * + | MetaErr of meta_name mcode * constraints * keep_binding * inherited - | MetaExpr of meta_name mcode * expression list * keep_binding * + | MetaExpr of meta_name mcode * constraints * keep_binding * Type_cocci.typeC list option * form * inherited | MetaExprList of meta_name mcode * listlen option * keep_binding * inherited (* only in arg lists *) @@ -192,6 +207,11 @@ and base_expression = | OptExp of expression | UniqueExp of expression +and constraints = + NoConstraint + | NotIdCstrt of idconstraint + | NotExpCstrt of expression list + (* ANY = int E; ID = idexpression int X; CONST = constant int X; *) and form = ANY | ID | LocalID | CONST (* form for MetaExp *) @@ -592,6 +612,13 @@ let mkToken x = Token (x,None) (* --------------------------------------------------------------------- *) +let lub_count i1 i2 = + match (i1,i2) with + (MANY,MANY) -> MANY + | _ -> ONE + +(* --------------------------------------------------------------------- *) + let rewrap model x = {model with node = x} let rewrap_mcode (_,a,b,c) x = (x,a,b,c) let unwrap x = x.node diff --git a/parsing_cocci/ast_cocci.mli b/parsing_cocci/ast_cocci.mli index 9ce4cdc..16e0b1b 100644 --- a/parsing_cocci/ast_cocci.mli +++ b/parsing_cocci/ast_cocci.mli @@ -1,3 +1,32 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* Constraints on Meta-* Identifiers, Functions *) +type idconstraint = + IdNoConstraint + | IdNegIdSet of string list + | IdRegExp of string * Str.regexp + | IdNotRegExp of string * Str.regexp + (* --------------------------------------------------------------------- *) (* Modified code *) @@ -21,9 +50,9 @@ type 'a wrap = iso_info : (string*anything) list } and 'a befaft = - BEFORE of 'a list list - | AFTER of 'a list list - | BEFOREAFTER of 'a list list * 'a list list + BEFORE of 'a list list * count + | AFTER of 'a list list * count + | BEFOREAFTER of 'a list list * 'a list list * count | NOTHING and 'a mcode = 'a * info * mcodekind * meta_pos (* pos variable *) @@ -32,7 +61,8 @@ and 'a mcode = 'a * info * mcodekind * meta_pos (* pos variable *) and mcodekind = MINUS of pos * int list * int * anything list list | CONTEXT of pos * anything befaft - | PLUS + | PLUS of count + and count = ONE (* + *) | MANY (* ++ *) and fixpos = Real of int (* charpos *) | Virt of int * int (* charpos + offset *) and pos = NoPos | DontCarePos | FixPos of (fixpos * fixpos) @@ -99,11 +129,10 @@ and 'a dots = 'a base_dots wrap (* Identifier *) and base_ident = - Id of string mcode - - | MetaId of meta_name mcode * ident list * keep_binding * inherited - | MetaFunc of meta_name mcode * ident list * keep_binding * inherited - | MetaLocalFunc of meta_name mcode * ident list * keep_binding * inherited + Id of string mcode + | MetaId of meta_name mcode * idconstraint * keep_binding * inherited + | MetaFunc of meta_name mcode * idconstraint * keep_binding * inherited + | MetaLocalFunc of meta_name mcode * idconstraint * keep_binding * inherited | OptIdent of ident | UniqueIdent of ident @@ -141,9 +170,9 @@ and base_expression = | Paren of string mcode (* ( *) * expression * string mcode (* ) *) - | MetaErr of meta_name mcode * expression list * keep_binding * + | MetaErr of meta_name mcode * constraints * keep_binding * inherited - | MetaExpr of meta_name mcode * expression list * keep_binding * + | MetaExpr of meta_name mcode * constraints * keep_binding * Type_cocci.typeC list option * form * inherited | MetaExprList of meta_name mcode * listlen option * keep_binding * inherited (* only in arg lists *) @@ -163,6 +192,11 @@ and base_expression = | OptExp of expression | UniqueExp of expression +and constraints = + NoConstraint + | NotIdCstrt of idconstraint + | NotExpCstrt of expression list + and form = ANY | ID | LocalID | CONST (* form for MetaExp *) and expression = base_expression wrap @@ -551,6 +585,8 @@ val mkToken : string -> anything val undots : 'a dots -> 'a list +val lub_count : count -> count -> count + (* --------------------------------------------------------------------- *) val rewrap : 'a wrap -> 'b -> 'b wrap diff --git a/parsing_cocci/check_meta.ml b/parsing_cocci/check_meta.ml index 291e932..43d7186 100644 --- a/parsing_cocci/check_meta.ml +++ b/parsing_cocci/check_meta.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* For minus fragment, checks that all of the identifier metavariables that @@ -83,31 +83,33 @@ let is_ifdef name = let ident context old_metas table minus i = match Ast0.unwrap i with - Ast0.Id((name,_,info,_,_,_) : string Ast0.mcode) -> - let rl = info.Ast0.pos_info.Ast0.line_start in - let err = - if List.exists (function x -> x = name) old_metas - && (minus || Ast0.get_mcodekind i = Ast0.PLUS) - then - begin - warning - (Printf.sprintf - "line %d: %s, previously declared as a metavariable, is used as an identifier" rl name); - true - end - else false in - (match context with - ID -> - if not (is_ifdef name) && minus && not err(* warn only once per id *) + Ast0.Id((name,_,info,_,_,_) : string Ast0.mcode) -> + let rl = info.Ast0.pos_info.Ast0.line_start in + let is_plus i = + match Ast0.get_mcodekind i with Ast0.PLUS _ -> true | _ -> false in + let err = + if List.exists (function x -> x = name) old_metas + && (minus || is_plus i) then - warning - (Printf.sprintf "line %d: should %s be a metavariable?" rl name) - | _ -> ()) - | Ast0.MetaId(name,_,_) -> check_table table minus name - | Ast0.MetaFunc(name,_,_) -> check_table table minus name - | Ast0.MetaLocalFunc(name,_,_) -> check_table table minus name - | Ast0.OptIdent(_) | Ast0.UniqueIdent(_) -> - failwith "unexpected code" + begin + warning + (Printf.sprintf + "line %d: %s, previously declared as a metavariable, is used as an identifier" rl name); + true + end + else false in + (match context with + ID -> + if not (is_ifdef name) && minus && not err(* warn only once per id *) + then + warning + (Printf.sprintf "line %d: should %s be a metavariable?" rl name) + | _ -> ()) + | Ast0.MetaId(name,_,_) -> check_table table minus name + | Ast0.MetaFunc(name,_,_) -> check_table table minus name + | Ast0.MetaLocalFunc(name,_,_) -> check_table table minus name + | Ast0.OptIdent(_) | Ast0.UniqueIdent(_) -> + failwith "unexpected code" (* --------------------------------------------------------------------- *) (* Expression *) diff --git a/parsing_cocci/check_meta.mli b/parsing_cocci/check_meta.mli index d239fc2..0e1e733 100644 --- a/parsing_cocci/check_meta.mli +++ b/parsing_cocci/check_meta.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val check_meta : string -> Ast_cocci.metavar list (* old metavariables *) -> diff --git a/parsing_cocci/comm_assoc.ml b/parsing_cocci/comm_assoc.ml index 60857d0..2f15177 100644 --- a/parsing_cocci/comm_assoc.ml +++ b/parsing_cocci/comm_assoc.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* searches for E op ..., for any commutative and associative binary diff --git a/parsing_cocci/comm_assoc.mli b/parsing_cocci/comm_assoc.mli index 351633b..a1e2237 100644 --- a/parsing_cocci/comm_assoc.mli +++ b/parsing_cocci/comm_assoc.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val comm_assoc : Ast0_cocci.rule -> string (* rule name *) -> string list (* dropped isos *) -> Ast0_cocci.rule diff --git a/parsing_cocci/compute_lines.ml b/parsing_cocci/compute_lines.ml index e7cf519..94b523e 100644 --- a/parsing_cocci/compute_lines.ml +++ b/parsing_cocci/compute_lines.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* Computes starting and ending logical lines for statements and @@ -207,15 +207,15 @@ let dots is_dots prev fn d = let rec ident i = match Ast0.unwrap i with - Ast0.Id(name) as ui -> - let name = promote_mcode name in mkres i ui name name - | Ast0.MetaId(name,_,_) - | Ast0.MetaFunc(name,_,_) | Ast0.MetaLocalFunc(name,_,_) as ui -> - let name = promote_mcode name in mkres i ui name name - | Ast0.OptIdent(id) -> - let id = ident id in mkres i (Ast0.OptIdent(id)) id id - | Ast0.UniqueIdent(id) -> - let id = ident id in mkres i (Ast0.UniqueIdent(id)) id id + Ast0.Id(name) as ui -> + let name = promote_mcode name in mkres i ui name name + | Ast0.MetaId(name,_,_) + | Ast0.MetaFunc(name,_,_) | Ast0.MetaLocalFunc(name,_,_) as ui -> + let name = promote_mcode name in mkres i ui name name + | Ast0.OptIdent(id) -> + let id = ident id in mkres i (Ast0.OptIdent(id)) id id + | Ast0.UniqueIdent(id) -> + let id = ident id in mkres i (Ast0.UniqueIdent(id)) id id (* --------------------------------------------------------------------- *) (* Expression *) diff --git a/parsing_cocci/compute_lines.mli b/parsing_cocci/compute_lines.mli index 2d2cdf0..9a3b3d8 100644 --- a/parsing_cocci/compute_lines.mli +++ b/parsing_cocci/compute_lines.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val compute_lines : bool -> Ast0_cocci.rule -> Ast0_cocci.rule val compute_statement_dots_lines : bool -> diff --git a/parsing_cocci/context_neg.ml b/parsing_cocci/context_neg.ml index 93997b5..8b0065a 100644 --- a/parsing_cocci/context_neg.ml +++ b/parsing_cocci/context_neg.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* Detects subtrees that are all minus/plus and nodes that are "binding @@ -141,7 +141,7 @@ let collect_plus_lines top = let donothing r k e = k e in let mcode (_,_,info,mcodekind,_,_) = match mcodekind with - Ast0.PLUS -> insert info.Ast0.pos_info.Ast0.line_start + Ast0.PLUS _ -> insert info.Ast0.pos_info.Ast0.line_start | _ -> () in let fn = V0.flat_combiner bind option_default @@ -153,7 +153,8 @@ let collect_plus_lines top = (* --------------------------------------------------------------------- *) -type kind = Neutral | AllMarked | NotAllMarked (* marked means + or - *) +type kind = + Neutral | AllMarked of Ast.count | NotAllMarked (* marked means + or - *) (* --------------------------------------------------------------------- *) (* The first part analyzes each of the minus tree and the plus tree @@ -176,7 +177,7 @@ type node = let kind2c = function Neutral -> "neutral" - | AllMarked -> "allmarked" + | AllMarked _ -> "allmarked" | NotAllMarked -> "notallmarked" let node2c = function @@ -189,8 +190,8 @@ tokens *) let bind c1 c2 = let lub = function (k1,k2) when k1 = k2 -> k1 - | (Neutral,AllMarked) -> AllMarked - | (AllMarked,Neutral) -> AllMarked + | (Neutral,AllMarked c) -> AllMarked c + | (AllMarked c,Neutral) -> AllMarked c | _ -> NotAllMarked in match (c1,c2) with (* token/token *) @@ -231,8 +232,8 @@ let option_default = (*Bind(Neutral,[],[],[],[],[])*) let mcode (_,_,info,mcodekind,pos,_) = let offset = info.Ast0.pos_info.Ast0.offset in match mcodekind with - Ast0.MINUS(_) -> Token(AllMarked,offset,mcodekind,[]) - | Ast0.PLUS -> Token(AllMarked,offset,mcodekind,[]) + Ast0.MINUS(_) -> Token(AllMarked Ast.ONE,offset,mcodekind,[]) + | Ast0.PLUS c -> Token(AllMarked c,offset,mcodekind,[]) | Ast0.CONTEXT(_) -> Token(NotAllMarked,offset,mcodekind,[offset]) | _ -> failwith "not possible" @@ -240,7 +241,7 @@ let neutral_mcode (_,_,info,mcodekind,pos,_) = let offset = info.Ast0.pos_info.Ast0.offset in match mcodekind with Ast0.MINUS(_) -> Token(Neutral,offset,mcodekind,[]) - | Ast0.PLUS -> Token(Neutral,offset,mcodekind,[]) + | Ast0.PLUS _ -> Token(Neutral,offset,mcodekind,[]) | Ast0.CONTEXT(_) -> Token(Neutral,offset,mcodekind,[offset]) | _ -> failwith "not possible" @@ -250,8 +251,8 @@ let nc_mcode (_,_,info,mcodekind,pos,_) = (* distinguish from the offset of some real token *) let offset = (-1) * info.Ast0.pos_info.Ast0.offset in match mcodekind with - Ast0.MINUS(_) -> Token(AllMarked,offset,mcodekind,[]) - | Ast0.PLUS -> Token(AllMarked,offset,mcodekind,[]) + Ast0.MINUS(_) -> Token(AllMarked Ast.ONE,offset,mcodekind,[]) + | Ast0.PLUS c -> Token(AllMarked c,offset,mcodekind,[]) | Ast0.CONTEXT(_) -> (* Unlike the other mcode cases, we drop the offset from the context offsets. This is because we don't know whether the term this is @@ -269,9 +270,10 @@ let union_all l = List.fold_left Common.union_set [] l intermingled with plus code. it is used in disj_cases *) let classify is_minus all_marked table code = let mkres builder k il tl bil btl l e = - (if k = AllMarked - then Ast0.set_mcodekind e (all_marked()) (* definitive *) - else + (match k with + AllMarked count -> + Ast0.set_mcodekind e (all_marked count) (* definitive *) + | _ -> let check_index il tl = if List.for_all is_context tl then @@ -1025,7 +1027,7 @@ let context_neg minus plus = classify true (function _ -> Ast0.MINUS(ref([],Ast0.default_token_info))) minus_table m in - let _ = classify false (function _ -> Ast0.PLUS) plus_table p in + let _ = classify false (function c -> Ast0.PLUS c) plus_table p in traverse minus_table plus_table; (m,p)::loop(minus,plus) end diff --git a/parsing_cocci/context_neg.mli b/parsing_cocci/context_neg.mli index acdb4b4..39cfe59 100644 --- a/parsing_cocci/context_neg.mli +++ b/parsing_cocci/context_neg.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val context_neg : Ast0_cocci.rule -> Ast0_cocci.rule -> (Ast0_cocci.top_level * Ast0_cocci.top_level) list diff --git a/parsing_cocci/data.ml b/parsing_cocci/data.ml index 07834de..e549e6a 100644 --- a/parsing_cocci/data.ml +++ b/parsing_cocci/data.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module Ast0 = Ast0_cocci @@ -28,7 +28,9 @@ module Ast = Ast_cocci metavariables *) type fresh = bool -type incl_iso = Include of string | Iso of (string,string) Common.either +type incl_iso = + Include of string | Iso of (string,string) Common.either + | Virt of string list (* virtual rules *) type clt = line_type * int * int * int * int (* starting spaces *) * @@ -42,11 +44,11 @@ type clt = and line_type = MINUS | OPTMINUS | UNIQUEMINUS - | PLUS + | PLUS | PLUSPLUS | CONTEXT | UNIQUE | OPT -type iconstraints = Ast0.ident list -type econstraints = Ast0.expression list +type iconstraints = Ast.idconstraint +type econstraints = Ast0.constraints type pconstraints = Ast.meta_name list let in_rule_name = ref false diff --git a/parsing_cocci/data.mli b/parsing_cocci/data.mli index d07c415..47e4d8d 100644 --- a/parsing_cocci/data.mli +++ b/parsing_cocci/data.mli @@ -1,9 +1,33 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + (* types that clutter the .mly file *) (* for iso metavariables, true if they can only match nonmodified, unitary metavariables *) type fresh = bool -type incl_iso = Include of string | Iso of (string,string) Common.either +type incl_iso = + Include of string | Iso of (string,string) Common.either + | Virt of string list (* virtual rules *) type clt = line_type * int * int * int * int (* starting spaces *) * @@ -15,11 +39,11 @@ type clt = and line_type = MINUS | OPTMINUS | UNIQUEMINUS - | PLUS + | PLUS | PLUSPLUS | CONTEXT | UNIQUE | OPT -type iconstraints = Ast0_cocci.ident list -type econstraints = Ast0_cocci.expression list +type iconstraints = Ast_cocci.idconstraint +type econstraints = Ast0_cocci.constraints type pconstraints = Ast_cocci.meta_name list val in_rule_name : bool ref (* true if parsing the rule name *) diff --git a/parsing_cocci/disjdistr.ml b/parsing_cocci/disjdistr.ml index 226fe18..5c91ce4 100644 --- a/parsing_cocci/disjdistr.ml +++ b/parsing_cocci/disjdistr.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module Ast = Ast_cocci diff --git a/parsing_cocci/disjdistr.mli b/parsing_cocci/disjdistr.mli index ae9c339..a46529c 100644 --- a/parsing_cocci/disjdistr.mli +++ b/parsing_cocci/disjdistr.mli @@ -1,2 +1,24 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val disj : Ast_cocci.rule_with_metavars list -> Ast_cocci.rule_with_metavars list diff --git a/parsing_cocci/flag_parsing_cocci.ml b/parsing_cocci/flag_parsing_cocci.ml dissimilarity index 75% index 84db93b..fafaf1b 100644 --- a/parsing_cocci/flag_parsing_cocci.ml +++ b/parsing_cocci/flag_parsing_cocci.ml @@ -1,31 +1,50 @@ -(* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) - - -(* uses E rather than A and adds comments indicating the start and end of -each matched term *) - -let sgrep_mode = ref false (* no longer supported, subsumed by sgrep2 *) - -let show_SP = ref false -let show_iso_failures = ref true - -let iso_limit = ref (None : int option) (*(Some 3)*) +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* uses E rather than A and adds comments indicating the start and end of +each matched term *) + +let sgrep_mode = ref false (* no longer supported, subsumed by sgrep2 *) + +let show_SP = ref false +let show_iso_failures = ref true + +let iso_limit = ref (None : int option) (*(Some 3)*) + +let defined_virtual_rules = ref [] +let undefined_virtual_rules = ref [] + +let set_defined_virtual_rules s = + (if List.mem s !undefined_virtual_rules + then + failwith + (Printf.sprintf "virtual method %s cannot be both defined and undefined" + s)); + defined_virtual_rules := s :: !defined_virtual_rules + +let set_undefined_virtual_rules s = + (if List.mem s !defined_virtual_rules + then + failwith + (Printf.sprintf "virtual method %s cannot be both defined and undefined" + s)); + undefined_virtual_rules := s :: !undefined_virtual_rules diff --git a/parsing_cocci/free_vars.ml b/parsing_cocci/free_vars.ml index 209e81d..55cd94b 100644 --- a/parsing_cocci/free_vars.ml +++ b/parsing_cocci/free_vars.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* For each rule return the list of variables that are used after it. @@ -287,13 +287,13 @@ let cip_mcodekind r mck = Ast.MINUS(_,_,_,anythings) -> process_anything_list_list anythings | Ast.CONTEXT(_,befaft) -> (match befaft with - Ast.BEFORE(ll) -> process_anything_list_list ll - | Ast.AFTER(ll) -> process_anything_list_list ll - | Ast.BEFOREAFTER(llb,lla) -> + Ast.BEFORE(ll,_) -> process_anything_list_list ll + | Ast.AFTER(ll,_) -> process_anything_list_list ll + | Ast.BEFOREAFTER(llb,lla,_) -> (process_anything_list_list lla) @ (process_anything_list_list llb) | Ast.NOTHING -> []) - | Ast.PLUS -> [] + | Ast.PLUS _ -> [] let collect_fresh_seed_env metavars l = diff --git a/parsing_cocci/free_vars.mli b/parsing_cocci/free_vars.mli index 979a59f..625b9e3 100644 --- a/parsing_cocci/free_vars.mli +++ b/parsing_cocci/free_vars.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + (* Used after things can only have one binding. Positions can have many bindings. These are combined in ctlcocciintegration, ie after the CTL generation. *) diff --git a/parsing_cocci/function_prototypes.ml b/parsing_cocci/function_prototypes.ml index 70a74bc..1bf76d7 100644 --- a/parsing_cocci/function_prototypes.ml +++ b/parsing_cocci/function_prototypes.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module Ast0 = Ast0_cocci @@ -29,11 +29,11 @@ type id = Id of string | Meta of (string * string) let rec get_name name = match Ast0.unwrap name with - Ast0.Id(nm) -> Id(Ast0.unwrap_mcode nm) - | Ast0.MetaId(nm,_,_) | Ast0.MetaFunc(nm,_,_) - | Ast0.MetaLocalFunc(nm,_,_) -> Meta(Ast0.unwrap_mcode nm) - | Ast0.OptIdent(id) | Ast0.UniqueIdent(id) -> - get_name id + Ast0.Id(nm) -> Id(Ast0.unwrap_mcode nm) + | Ast0.MetaId(nm,_,_) | Ast0.MetaFunc(nm,_,_) + | Ast0.MetaLocalFunc(nm,_,_) -> Meta(Ast0.unwrap_mcode nm) + | Ast0.OptIdent(id) | Ast0.UniqueIdent(id) -> + get_name id (* --------------------------------------------------------------------- *) (* collect all of the functions *) @@ -126,9 +126,11 @@ let rec align all_minus all_plus = and strip = let donothing r k e = - {(Ast0.wrap (Ast0.unwrap (k e))) with Ast0.mcodekind = ref Ast0.PLUS} in + {(Ast0.wrap (Ast0.unwrap (k e))) with + Ast0.mcodekind = ref (Ast0.PLUS Ast.ONE)} in let mcode (mc,_,_,_,_,_) = - (mc,Ast0.NONE,Ast0.default_info(),Ast0.PLUS,ref Ast0.NoMetaPos,-1) in + (mc,Ast0.NONE,Ast0.default_info(),Ast0.PLUS Ast.ONE, + ref Ast0.NoMetaPos,-1) in (* need a case for everything that has an unvisited component and can be in a function prototype *) diff --git a/parsing_cocci/function_prototypes.mli b/parsing_cocci/function_prototypes.mli index 85b056c..6fc8757 100644 --- a/parsing_cocci/function_prototypes.mli +++ b/parsing_cocci/function_prototypes.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val process : string (* name *) -> Ast_cocci.metavar list -> string list (* dropped isos *) -> Ast0_cocci.rule -> Ast0_cocci.rule -> Ast_cocci.ruletype -> diff --git a/parsing_cocci/get_constants.ml b/parsing_cocci/get_constants.ml index 814e9c1..7f5494b 100644 --- a/parsing_cocci/get_constants.ml +++ b/parsing_cocci/get_constants.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* get a list of all of the constants in the - slice of a SmPL file, to be @@ -157,9 +157,9 @@ let get_plus_constants = [] l in match mcodekind with Ast.MINUS(_,_,_,anythings) -> recurse anythings - | Ast.CONTEXT(_,Ast.BEFORE(a)) -> recurse a - | Ast.CONTEXT(_,Ast.AFTER(a)) -> recurse a - | Ast.CONTEXT(_,Ast.BEFOREAFTER(a1,a2)) -> + | Ast.CONTEXT(_,Ast.BEFORE(a,_)) -> recurse a + | Ast.CONTEXT(_,Ast.AFTER(a,_)) -> recurse a + | Ast.CONTEXT(_,Ast.BEFOREAFTER(a1,a2,_)) -> Common.union_set (recurse a1) (recurse a2) | _ -> [] in diff --git a/parsing_cocci/get_constants.mli b/parsing_cocci/get_constants.mli index 657faf5..cca4fde 100644 --- a/parsing_cocci/get_constants.mli +++ b/parsing_cocci/get_constants.mli @@ -1 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val get_constants : Ast_cocci.rule list -> string list list diff --git a/parsing_cocci/get_constants2.ml b/parsing_cocci/get_constants2.ml index 44cb598..8b11cfe 100644 --- a/parsing_cocci/get_constants2.ml +++ b/parsing_cocci/get_constants2.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module Ast = Ast_cocci @@ -47,7 +47,7 @@ wanted *) type combine = And of combine list | Or of combine list | Elem of string | False | True -let interpret strict x = +let interpret_glimpse strict x = let rec loop = function Elem x -> x | And [x] -> loop x @@ -63,12 +63,45 @@ let interpret strict x = True -> None | False when strict -> failwith "False should not be in the final result. Perhaps your rule doesn't contain any +/-/* code" - | _ -> Some (loop x) + | _ -> Some [(loop x)] + +let interpret_google strict x = + (* convert to dnf *) + let rec dnf = function + Elem x -> [x] + | Or l -> List.fold_left Common.union_set [] (List.map dnf l) + | And l -> + let l = List.map dnf l in + List.fold_left + (function prev -> + function cur -> + List.fold_left Common.union_set [] + (List.map + (function x -> + List.map (function y -> Printf.sprintf "%s %s" x y) prev) + cur)) + [] l + | True -> ["True"] + | False -> + if strict + then failwith "False should not be in the final result. Perhaps your rule doesn't contain any +/-/* code" + else ["False"] in + match x with + True -> None + | False when strict -> + failwith "False should not be in the final result. Perhaps your rule doesn't contain any +/-/* code" + | _ -> Some (dnf x) + +let interpret strict x = + match !Flag.scanner with + Flag.Glimpse -> interpret_glimpse strict x + | Flag.Google _ -> interpret_google strict x + | _ -> failwith "not possible" let combine2c x = match interpret false x with None -> "None" - | Some x -> x + | Some x -> String.concat " || " x let norm = function And l -> And (List.sort compare l) @@ -375,9 +408,9 @@ let get_plus_constants = [] l in match mcodekind with Ast.MINUS(_,_,_,anythings) -> recurse anythings - | Ast.CONTEXT(_,Ast.BEFORE(a)) -> recurse a - | Ast.CONTEXT(_,Ast.AFTER(a)) -> recurse a - | Ast.CONTEXT(_,Ast.BEFOREAFTER(a1,a2)) -> + | Ast.CONTEXT(_,Ast.BEFORE(a,_)) -> recurse a + | Ast.CONTEXT(_,Ast.AFTER(a,_)) -> recurse a + | Ast.CONTEXT(_,Ast.BEFOREAFTER(a1,a2,_)) -> Common.union_set (recurse a1) (recurse a2) | _ -> [] in @@ -454,38 +487,42 @@ let rule_fn tls in_plus env neg_pos = | x -> (build_or x rest_info, new_plusses)) (False,in_plus) (List.combine tls neg_pos) -let get_constants rules neg_pos_vars = - if not !Flag.use_glimpse - then None - else - let (info,_,_,_) = - List.fold_left - (function (rest_info,in_plus,env,locals(*dom of env*)) -> - function - (Ast.ScriptRule (_,deps,mv,_),_) -> - let extra_deps = - List.fold_left - (function prev -> - function (_,(rule,_)) -> Ast.AndDep (Ast.Dep rule,prev)) - deps mv in - (match dependencies env extra_deps with - False -> (rest_info, in_plus, env, locals) - | dependencies -> - (build_or dependencies rest_info, in_plus, env, locals)) - | (Ast.InitialScriptRule (_,_),_) - | (Ast.FinalScriptRule (_,_),_) -> (rest_info,in_plus,env,locals) - | (Ast.CocciRule (nm,(dep,_,_),cur,_,_),neg_pos_vars) -> - let (cur_info,cur_plus) = - rule_fn cur in_plus ((nm,True)::env) neg_pos_vars in - if List.for_all all_context.V.combiner_top_level cur - then (rest_info,cur_plus,(nm,cur_info)::env,nm::locals) - else +let get_constants rules neg_pos_vars virt = + match !Flag.scanner with + Flag.NoScanner -> None + | Flag.Glimpse | Flag.Google _ -> + let virt = + List.map (function (x,v) -> (x, if v then True else False)) virt in + let (info,_,_,_) = + List.fold_left + (function (rest_info,in_plus,env,locals(*dom of env*)) -> + function + (Ast.ScriptRule (_,deps,mv,_),_) -> + let extra_deps = + List.fold_left + (function prev -> + function (_,(rule,_)) -> + Ast.AndDep (Ast.Dep rule,prev)) + deps mv in + (match dependencies env extra_deps with + False -> (rest_info, in_plus, env, locals) + | dependencies -> + (build_or dependencies rest_info, in_plus, env, locals)) + | (Ast.InitialScriptRule (_,_),_) + | (Ast.FinalScriptRule (_,_),_) -> (rest_info,in_plus,env,locals) + | (Ast.CocciRule (nm,(dep,_,_),cur,_,_),neg_pos_vars) -> + let (cur_info,cur_plus) = + rule_fn cur in_plus ((nm,True)::env) neg_pos_vars in + if List.for_all all_context.V.combiner_top_level cur + then (rest_info,cur_plus,(nm,cur_info)::env,nm::locals) + else (* no constants if dependent on another rule; then we need to find the constants of that rule *) - match dependencies env dep with - False -> (rest_info,cur_plus,env,locals) - | dependencies -> - (build_or (build_and dependencies cur_info) rest_info, - cur_plus,env,locals)) - (False,[],[],[]) (List.combine (rules : Ast.rule list) neg_pos_vars) in - interpret true info + match dependencies env dep with + False -> (rest_info,cur_plus,env,locals) + | dependencies -> + (build_or (build_and dependencies cur_info) rest_info, + cur_plus,env,locals)) + (False,[],virt,[]) + (List.combine (rules : Ast.rule list) neg_pos_vars) in + interpret true info diff --git a/parsing_cocci/get_constants2.mli b/parsing_cocci/get_constants2.mli index ec735e1..5224976 100644 --- a/parsing_cocci/get_constants2.mli +++ b/parsing_cocci/get_constants2.mli @@ -1,4 +1,27 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val get_constants : Ast_cocci.rule list -> (((Ast_cocci.meta_name list) list) list) (*negated pos vars*) -> - string option + ((string * bool) list (* virtual rule info *)) -> + string list option diff --git a/parsing_cocci/index.ml b/parsing_cocci/index.ml index b516b0e..a6c9481 100644 --- a/parsing_cocci/index.ml +++ b/parsing_cocci/index.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* create an index for each constructor *) @@ -76,12 +76,12 @@ let case_line_dots d = let ident i = match Ast0.unwrap i with - Ast0.Id(name) -> [10] - | Ast0.MetaId(name,_,_) -> [11] - | Ast0.MetaFunc(name,_,_) -> [12] - | Ast0.MetaLocalFunc(name,_,_) -> [13] - | Ast0.OptIdent(id) -> [14] - | Ast0.UniqueIdent(id) -> [15] + Ast0.Id(name) -> [10] + | Ast0.MetaId(name,_,_) -> [11] + | Ast0.MetaFunc(name,_,_) -> [12] + | Ast0.MetaLocalFunc(name,_,_) -> [13] + | Ast0.OptIdent(id) -> [14] + | Ast0.UniqueIdent(id) -> [15] let expression e = match Ast0.unwrap e with diff --git a/parsing_cocci/index.mli b/parsing_cocci/index.mli index cf6fdbf..6704434 100644 --- a/parsing_cocci/index.mli +++ b/parsing_cocci/index.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val expression_dots : Ast0_cocci.expression Ast0_cocci.dots -> int list val initialiser_dots : Ast0_cocci.initialiser Ast0_cocci.dots -> int list val parameter_dots : Ast0_cocci.parameterTypeDef Ast0_cocci.dots -> int list diff --git a/parsing_cocci/insert_plus.ml b/parsing_cocci/insert_plus.ml index b828c12..792c78c 100644 --- a/parsing_cocci/insert_plus.ml +++ b/parsing_cocci/insert_plus.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* The error message "no available token to attach to" often comes in an @@ -467,20 +467,20 @@ let collect_plus_nodes root = Ast0.offset = first.Ast0.offset} in let new_info = {adjust_info with Ast0.pos_info = new_pos_info} in let string = List.map (function (s,_) -> s) strings_before in - [(new_info, Ast.Pragma (string))] in + [(new_info,Ast.ONE(*?*),Ast.Pragma (string))] in let bef = extract info.Ast0.strings_before in let aft = extract info.Ast0.strings_after in (bef,aft) in let mcode fn (term,_,info,mcodekind,_,_) = match mcodekind with - Ast0.PLUS -> [(info,fn term)] + Ast0.PLUS c -> [(info,c,fn term)] | Ast0.CONTEXT _ -> let (bef,aft) = extract_strings info in bef@aft | _ -> [] in let imcode fn (term,_,info,mcodekind,_,_) = match mcodekind with - Ast0.PLUS -> [(info,fn term (Ast0toast.convert_info info))] + Ast0.PLUS c -> [(info,c,fn term (Ast0toast.convert_info info))] | Ast0.CONTEXT _ -> let (bef,aft) = extract_strings info in bef@aft | _ -> [] in @@ -489,7 +489,7 @@ let collect_plus_nodes root = let do_nothing fn r k e = match Ast0.get_mcodekind e with (Ast0.CONTEXT(_)) when not(Ast0.get_index e = root_index) -> [] - | Ast0.PLUS -> [(Ast0.get_info e,fn e)] + | Ast0.PLUS c -> [(Ast0.get_info e,c,fn e)] | _ -> k e in (* case for everything that is just a wrapper for a simpler thing *) @@ -547,7 +547,7 @@ let collect_plus_nodes root = stmt (do_nothing mk_case_line) toplevel let call_collect_plus context_nodes : - (int * (Ast0.info * Ast.anything) list) list = + (int * (Ast0.info * Ast.count * Ast.anything) list) list = List.map (function e -> match e with @@ -624,35 +624,39 @@ let redo info start finish = {info with Ast0.pos_info = new_pos_info} let rec find_neighbors (index,l) : - int * (Ast0.info * (Ast.anything list list)) list = + int * (Ast0.info * Ast.count * (Ast.anything list list)) list = let rec loop = function [] -> [] - | (i,x)::rest -> + | (i,c,x)::rest -> (match loop rest with - ((i1,(x1::rest_inner))::rest_middle)::rest_outer -> + ((i1,c1,(x1::rest_inner))::rest_middle)::rest_outer -> let finish1 = logend i in let start2 = logstart i1 in if finish1 = start2 then - ((redo i (logstart i) (logend i1),(x::x1::rest_inner)) + ((if not (c = c1) then failwith "inconsistent + code"); + ((redo i (logstart i) (logend i1),c,(x::x1::rest_inner)) ::rest_middle) - ::rest_outer + ::rest_outer) else if finish1 + 1 = start2 - then ((i,[x])::(i1,(x1::rest_inner))::rest_middle)::rest_outer - else [(i,[x])]::((i1,(x1::rest_inner))::rest_middle)::rest_outer - | _ -> [[(i,[x])]]) (* rest must be [] *) in + then ((i,c,[x])::(i1,c1,(x1::rest_inner))::rest_middle)::rest_outer + else + [(i,c,[x])]::((i1,c1,(x1::rest_inner))::rest_middle)::rest_outer + | _ -> [[(i,c,[x])]]) (* rest must be [] *) in let res = List.map (function l -> - let (start_info,_) = List.hd l in - let (end_info,_) = List.hd (List.rev l) in + let (start_info,start_count,_) = List.hd l in + let (end_info,end_count,_) = List.hd (List.rev l) in + (if not (start_count = end_count) then failwith "inconsistent + code"); (redo start_info (logstart start_info) (logend end_info), - List.map (function (_,x) -> x) l)) + start_count, + List.map (function (_,_,x) -> x) l)) (loop l) in (index,res) let process_plus plus : - (int * (Ast0.info * Ast.anything list list) list) list = + (int * (Ast0.info * Ast.count * Ast.anything list list) list) list = List.concat (List.map (function x -> @@ -769,48 +773,60 @@ let init thing info = Ast0.left_offset = info.Ast0.pos_info.Ast0.offset; Ast0.right_offset = info.Ast0.pos_info.Ast0.offset}) -let attachbefore (infop,p) = function +let attachbefore (infop,c,p) = function Ast0.MINUS(replacements) -> - (match !replacements with - ([],ti) -> replacements := init p infop - | (repl,ti) -> replacements := insert p infop repl ti) + let (repl,ti) = !replacements in + let (bef,ti) = + match repl with + [] -> init p infop + | repl -> insert p infop repl ti in + replacements := (bef,ti) | Ast0.CONTEXT(neighbors) -> let (repl,ti1,ti2) = !neighbors in (match repl with - Ast.BEFORE(bef) -> + Ast.BEFORE(bef,it) -> let (bef,ti1) = insert p infop bef ti1 in - neighbors := (Ast.BEFORE(bef),ti1,ti2) - | Ast.AFTER(aft) -> + let it = Ast.lub_count it c in + neighbors := (Ast.BEFORE(bef,it),ti1,ti2) + | Ast.AFTER(aft,it) -> let (bef,ti1) = init p infop in - neighbors := (Ast.BEFOREAFTER(bef,aft),ti1,ti2) - | Ast.BEFOREAFTER(bef,aft) -> + let it = Ast.lub_count it c in + neighbors := (Ast.BEFOREAFTER(bef,aft,it),ti1,ti2) + | Ast.BEFOREAFTER(bef,aft,it) -> let (bef,ti1) = insert p infop bef ti1 in - neighbors := (Ast.BEFOREAFTER(bef,aft),ti1,ti2) + let it = Ast.lub_count it c in + neighbors := (Ast.BEFOREAFTER(bef,aft,it),ti1,ti2) | Ast.NOTHING -> let (bef,ti1) = init p infop in - neighbors := (Ast.BEFORE(bef),ti1,ti2)) + neighbors := (Ast.BEFORE(bef,c),ti1,ti2)) | _ -> failwith "not possible for attachbefore" -let attachafter (infop,p) = function +let attachafter (infop,c,p) = function Ast0.MINUS(replacements) -> - (match !replacements with - ([],ti) -> replacements := init p infop - | (repl,ti) -> replacements := insert p infop repl ti) + let (repl,ti) = !replacements in + let (aft,ti) = + match repl with + [] -> init p infop + | repl -> insert p infop repl ti in + replacements := (aft,ti) | Ast0.CONTEXT(neighbors) -> let (repl,ti1,ti2) = !neighbors in (match repl with - Ast.BEFORE(bef) -> + Ast.BEFORE(bef,it) -> let (aft,ti2) = init p infop in - neighbors := (Ast.BEFOREAFTER(bef,aft),ti1,ti2) - | Ast.AFTER(aft) -> + let it = Ast.lub_count it c in + neighbors := (Ast.BEFOREAFTER(bef,aft,it),ti1,ti2) + | Ast.AFTER(aft,it) -> let (aft,ti2) = insert p infop aft ti2 in - neighbors := (Ast.AFTER(aft),ti1,ti2) - | Ast.BEFOREAFTER(bef,aft) -> + let it = Ast.lub_count it c in + neighbors := (Ast.AFTER(aft,it),ti1,ti2) + | Ast.BEFOREAFTER(bef,aft,it) -> let (aft,ti2) = insert p infop aft ti2 in - neighbors := (Ast.BEFOREAFTER(bef,aft),ti1,ti2) + let it = Ast.lub_count it c in + neighbors := (Ast.BEFOREAFTER(bef,aft,it),ti1,ti2) | Ast.NOTHING -> let (aft,ti2) = init p infop in - neighbors := (Ast.AFTER(aft),ti1,ti2)) + neighbors := (Ast.AFTER(aft,c),ti1,ti2)) | _ -> failwith "not possible for attachbefore" let attach_all_before ps m = @@ -822,7 +838,7 @@ let attach_all_after ps m = let split_at_end info ps = let split_point = info.Ast0.pos_info.Ast0.logical_end in List.partition - (function (info,_) -> info.Ast0.pos_info.Ast0.logical_end < split_point) + (function (info,_,_) -> info.Ast0.pos_info.Ast0.logical_end < split_point) ps let allminus = function @@ -831,7 +847,7 @@ let allminus = function let rec before_m1 ((f1,infom1,m1) as x1) ((f2,infom2,m2) as x2) rest = function [] -> () - | (((infop,_) as p) :: ps) as all -> + | (((infop,_,_) as p) :: ps) as all -> if less_than_start infop infom1 or (allminus m1 && less_than_end infop infom1) (* account for trees *) then @@ -845,7 +861,7 @@ let rec before_m1 ((f1,infom1,m1) as x1) ((f2,infom2,m2) as x2) rest = function and after_m1 ((f1,infom1,m1) as x1) ((f2,infom2,m2) as x2) rest = function [] -> () - | (((infop,pcode) as p) :: ps) as all -> + | (((infop,count,pcode) as p) :: ps) as all -> (* if the following is false, then some + code is stuck in the middle of some context code (m1). could drop down to the token level. this might require adjustments in ast0toast as well, when + code on @@ -900,10 +916,10 @@ and is_minus = function | _ -> false and before_m2 ((f2,infom2,m2) as x2) rest - (p : (Ast0.info * Ast.anything list list) list) = + (p : (Ast0.info * Ast.count * Ast.anything list list) list) = match (rest,p) with (_,[]) -> () - | ([],((infop,_)::_)) -> + | ([],((infop,_,_)::_)) -> let (bef_m2,aft_m2) = split_at_end infom2 p in (* bef_m2 isn't empty *) if good_start infom2 then (attach_all_before bef_m2 m2; after_m2 x2 rest aft_m2) @@ -914,10 +930,10 @@ and before_m2 ((f2,infom2,m2) as x2) rest | (m::ms,_) -> before_m1 x2 m ms p and after_m2 ((f2,infom2,m2) as x2) rest - (p : (Ast0.info * Ast.anything list list) list) = + (p : (Ast0.info * Ast.count * Ast.anything list list) list) = match (rest,p) with (_,[]) -> () - | ([],((infop,_)::_)) -> + | ([],((infop,_,_)::_)) -> if good_end infom2 then attach_all_after p m2 else @@ -927,7 +943,8 @@ and after_m2 ((f2,infom2,m2) as x2) rest | (m::ms,_) -> after_m1 x2 m ms p let merge_one : (minus_join_point * Ast0.info * 'a) list * - (Ast0.info * Ast.anything list list) list -> unit = function (m,p) -> + (Ast0.info * Ast.count * Ast.anything list list) list -> unit = + function (m,p) -> (* Printf.printf "minus code\n"; List.iter diff --git a/parsing_cocci/insert_plus.mli b/parsing_cocci/insert_plus.mli index 788df0b..18f317f 100644 --- a/parsing_cocci/insert_plus.mli +++ b/parsing_cocci/insert_plus.mli @@ -1,2 +1,24 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val insert_plus : Ast0_cocci.rule -> Ast0_cocci.rule -> bool -> unit (* bool is true if no isos *) diff --git a/parsing_cocci/iso_compile.ml b/parsing_cocci/iso_compile.ml index a04141b..e749ea9 100644 --- a/parsing_cocci/iso_compile.ml +++ b/parsing_cocci/iso_compile.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module V0 = Visitor_ast0 diff --git a/parsing_cocci/iso_compile.mli b/parsing_cocci/iso_compile.mli index 6b336f5..b0a6a21 100644 --- a/parsing_cocci/iso_compile.mli +++ b/parsing_cocci/iso_compile.mli @@ -1,2 +1,24 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val process : Iso_pattern.isomorphism -> unit diff --git a/parsing_cocci/iso_pattern.ml b/parsing_cocci/iso_pattern.ml index 632c01a..199c8a9 100644 --- a/parsing_cocci/iso_pattern.ml +++ b/parsing_cocci/iso_pattern.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* Potential problem: offset of mcode is not updated when an iso is @@ -44,11 +44,12 @@ type isomorphism = let strip_info = let mcode (term,_,_,_,_,_) = - (term,Ast0.NONE,Ast0.default_info(),Ast0.PLUS,ref Ast0.NoMetaPos,-1) in + (term,Ast0.NONE,Ast0.default_info(),Ast0.PLUS Ast.ONE, + ref Ast0.NoMetaPos,-1) in let donothing r k e = let x = k e in {(Ast0.wrap (Ast0.unwrap x)) with - Ast0.mcodekind = ref Ast0.PLUS; + Ast0.mcodekind = ref (Ast0.PLUS Ast.ONE); Ast0.true_if_test = x.Ast0.true_if_test} in V0.flat_rebuilder mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode @@ -290,7 +291,7 @@ let rec is_pure_context s = (match Ast.unwrap s with Ast.IfThen(_,_,_) -> false (* potentially dangerous *) | _ -> true) - | (_,_) -> false) + | (_,_) -> false) | _ -> false)) let is_minus e = @@ -1222,7 +1223,7 @@ let make_minus = mcodekind := Ast0.MINUS(ref([],Ast0.default_token_info)) | _ -> failwith "make_minus: unexpected befaft") | Ast0.MINUS(_mc) -> () (* in the part copied from the src term *) - | Ast0.PLUS -> failwith "make_minus donothing: unexpected plus mcodekind" + | Ast0.PLUS _ -> failwith "make_minus donothing: unexpected plus mcodekind" | _ -> failwith "make_minus donothing: unexpected mcodekind" in let donothing r k e = @@ -1330,12 +1331,12 @@ let make_minus = let rebuild_mcode start_line = let copy_mcodekind = function Ast0.CONTEXT(mc) -> Ast0.CONTEXT(ref (!mc)) - | Ast0.MINUS(mc) -> Ast0.MINUS(ref (!mc)) - | Ast0.MIXED(mc) -> Ast0.MIXED(ref (!mc)) - | Ast0.PLUS -> + | Ast0.MINUS(mc) -> Ast0.MINUS(ref (!mc)) + | Ast0.MIXED(mc) -> Ast0.MIXED(ref (!mc)) + | Ast0.PLUS count -> (* this function is used elsewhere where we need to rebuild the indices, and so we allow PLUS code as well *) - Ast0.PLUS in + Ast0.PLUS count in let mcode (term,arity,info,mcodekind,pos,adj) = let info = @@ -1644,8 +1645,8 @@ let instantiate bindings mv_bindings = (Ast0.get_mcode_mcodekind op) -> k e1 | Ast0.Edots(_,_) -> k (Ast0.rewrap e (Ast0.unwrap res)) - | Ast0.Paren(lp,e,rp) -> - negate e e + | Ast0.Paren(lp,e1,rp) -> + negate e e1 (function x -> k (Ast0.rewrap res (Ast0.Paren(lp,x,rp)))) | Ast0.Binary(e1,op,e2) when @@ -1847,33 +1848,38 @@ let merge_plus model_mcode e_mcode = let merged = match (mba,eba) with (x,Ast.NOTHING) | (Ast.NOTHING,x) -> x - | (Ast.BEFORE(b1),Ast.BEFORE(b2)) -> Ast.BEFORE(b1@b2) - | (Ast.BEFORE(b),Ast.AFTER(a)) -> Ast.BEFOREAFTER(b,a) - | (Ast.BEFORE(b1),Ast.BEFOREAFTER(b2,a)) -> - Ast.BEFOREAFTER(b1@b2,a) - | (Ast.AFTER(a),Ast.BEFORE(b)) -> Ast.BEFOREAFTER(b,a) - | (Ast.AFTER(a1),Ast.AFTER(a2)) ->Ast.AFTER(a2@a1) - | (Ast.AFTER(a1),Ast.BEFOREAFTER(b,a2)) -> Ast.BEFOREAFTER(b,a2@a1) - | (Ast.BEFOREAFTER(b1,a),Ast.BEFORE(b2)) -> - Ast.BEFOREAFTER(b1@b2,a) - | (Ast.BEFOREAFTER(b,a1),Ast.AFTER(a2)) -> - Ast.BEFOREAFTER(b,a2@a1) - | (Ast.BEFOREAFTER(b1,a1),Ast.BEFOREAFTER(b2,a2)) -> - Ast.BEFOREAFTER(b1@b2,a2@a1) in + | (Ast.BEFORE(b1,it1),Ast.BEFORE(b2,it2)) -> + Ast.BEFORE(b1@b2,Ast.lub_count it1 it2) + | (Ast.BEFORE(b,it1),Ast.AFTER(a,it2)) -> + Ast.BEFOREAFTER(b,a,Ast.lub_count it1 it2) + | (Ast.BEFORE(b1,it1),Ast.BEFOREAFTER(b2,a,it2)) -> + Ast.BEFOREAFTER(b1@b2,a,Ast.lub_count it1 it2) + | (Ast.AFTER(a,it1),Ast.BEFORE(b,it2)) -> + Ast.BEFOREAFTER(b,a,Ast.lub_count it1 it2) + | (Ast.AFTER(a1,it1),Ast.AFTER(a2,it2)) -> + Ast.AFTER(a2@a1,Ast.lub_count it1 it2) + | (Ast.AFTER(a1,it1),Ast.BEFOREAFTER(b,a2,it2)) -> + Ast.BEFOREAFTER(b,a2@a1,Ast.lub_count it1 it2) + | (Ast.BEFOREAFTER(b1,a,it1),Ast.BEFORE(b2,it2)) -> + Ast.BEFOREAFTER(b1@b2,a,Ast.lub_count it1 it2) + | (Ast.BEFOREAFTER(b,a1,it1),Ast.AFTER(a2,it2)) -> + Ast.BEFOREAFTER(b,a2@a1,Ast.lub_count it1 it2) + | (Ast.BEFOREAFTER(b1,a1,it1),Ast.BEFOREAFTER(b2,a2,it2)) -> + Ast.BEFOREAFTER(b1@b2,a2@a1,Ast.lub_count it1 it2) in emc := (merged,tb,ta) | Ast0.MINUS(emc) -> let (anything_bef_aft,_,_) = !mc in let (anythings,t) = !emc in emc := (match anything_bef_aft with - Ast.BEFORE(b) -> (b@anythings,t) - | Ast.AFTER(a) -> (anythings@a,t) - | Ast.BEFOREAFTER(b,a) -> (b@anythings@a,t) + Ast.BEFORE(b,_) -> (b@anythings,t) + | Ast.AFTER(a,_) -> (anythings@a,t) + | Ast.BEFOREAFTER(b,a,_) -> (b@anythings@a,t) | Ast.NOTHING -> (anythings,t)) | Ast0.MIXED(_) -> failwith "how did this become mixed?" | _ -> failwith "not possible 7") | Ast0.MIXED(_) -> failwith "not possible 8" - | Ast0.PLUS -> failwith "not possible 9" + | Ast0.PLUS _ -> failwith "not possible 9" let copy_plus printer minusify model e = if !Flag.sgrep_mode2 @@ -1895,7 +1901,7 @@ let copy_minus printer minusify model e = if !Flag.sgrep_mode2 then e else failwith "not possible 8" - | Ast0.PLUS -> failwith "not possible 9" + | Ast0.PLUS _ -> failwith "not possible 9" let whencode_allowed prev_ecount prev_icount prev_dcount ecount icount dcount rest = diff --git a/parsing_cocci/iso_pattern.mli b/parsing_cocci/iso_pattern.mli index d12a37a..bd4c3ff 100644 --- a/parsing_cocci/iso_pattern.mli +++ b/parsing_cocci/iso_pattern.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + type isomorphism = Ast_cocci.metavar list * Ast0_cocci.anything list list * string(*iso name*) diff --git a/parsing_cocci/lexer_cocci.mll b/parsing_cocci/lexer_cocci.mll index 95d0b32..14a62d9 100644 --- a/parsing_cocci/lexer_cocci.mll +++ b/parsing_cocci/lexer_cocci.mll @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) { @@ -49,7 +49,7 @@ let get_current_line_type lexbuf = let preceeding_spaces = if !line_start < 0 then 0 else lex_start - !line_start in (*line_start := -1;*) - prev_plus := (c = D.PLUS); + prev_plus := (c = D.PLUS) or (c = D.PLUSPLUS); (c,l,ll,lex_start,preceeding_spaces,[],[],Ast0.NoMetaPos) let current_line_started = ref false let col_zero = ref true @@ -87,6 +87,8 @@ let add_current_line_type x = current_line_type := (D.OPTMINUS,ln,lln) | (D.PLUS,(D.CONTEXT,ln,lln)) -> current_line_type := (D.PLUS,ln,lln) + | (D.PLUSPLUS,(D.CONTEXT,ln,lln)) -> + current_line_type := (D.PLUSPLUS,ln,lln) | (D.UNIQUE,(D.CONTEXT,ln,lln)) -> current_line_type := (D.UNIQUE,ln,lln) | (D.OPT,(D.CONTEXT,ln,lln)) -> @@ -95,7 +97,7 @@ let add_current_line_type x = let check_minus_context_linetype s = match !current_line_type with - (D.PLUS,_,_) -> lexerr "invalid in a + context: " s + (D.PLUS,_,_) | (D.PLUSPLUS,_,_) -> lexerr "invalid in a + context: " s | _ -> () let check_context_linetype s = @@ -105,17 +107,18 @@ let check_context_linetype s = let check_plus_linetype s = match !current_line_type with - (D.PLUS,_,_) -> () + (D.PLUS,_,_) | (D.PLUSPLUS,_,_) -> () | _ -> lexerr "invalid in a non + context: " s let check_arity_context_linetype s = match !current_line_type with - (D.CONTEXT,_,_) | (D.PLUS,_,_) | (D.UNIQUE,_,_) | (D.OPT,_,_) -> () + (D.CONTEXT,_,_) | (D.PLUS,_,_) | (D.PLUSPLUS,_,_) + | (D.UNIQUE,_,_) | (D.OPT,_,_) -> () | _ -> lexerr "invalid in a nonempty context: " s let process_include start finish str = (match !current_line_type with - (D.PLUS,_,_) -> + (D.PLUS,_,_) | (D.PLUSPLUS,_,_) -> (try let _ = Str.search_forward (Str.regexp "\\.\\.\\.") str start in lexerr "... not allowed in + include" "" @@ -216,6 +219,7 @@ let id_tokens lexbuf = | "words" when in_meta -> check_context_linetype s; TWords | "using" when in_rule_name || in_prolog -> check_context_linetype s; TUsing + | "virtual" when in_prolog -> check_context_linetype s; TVirtual | "disable" when in_rule_name -> check_context_linetype s; TDisable | "extends" when in_rule_name -> check_context_linetype s; TExtends | "depends" when in_rule_name -> check_context_linetype s; TDepends @@ -309,7 +313,7 @@ let init _ = Hashtbl.replace metavariables (get_name name) fn); Data.add_fresh_id_meta := (fun name -> - let fn clt = TMetaId(name,[],Ast0.Impure,clt) in + let fn clt = TMetaId(name,Ast.IdNoConstraint,Ast0.Impure,clt) in Hashtbl.replace metavariables (get_name name) fn); Data.add_type_meta := (fun name pure -> @@ -448,6 +452,8 @@ rule token = parse then (start_line true; TArob) else (check_minus_context_linetype "@"; TPArob) } + | "~=" { start_line true; TTildeEq (get_current_line_type lexbuf) } + | "!~=" { start_line true; TTildeExclEq (get_current_line_type lexbuf) } | "WHEN" | "when" { start_line true; check_minus_context_linetype (tok lexbuf); TWhen (get_current_line_type lexbuf) } @@ -553,7 +559,12 @@ rule token = parse TDmOp (Ast.Mod,get_current_line_type lexbuf) } | '~' { start_line true; TTilde (get_current_line_type lexbuf) } - | "++" { start_line true; TInc (get_current_line_type lexbuf) } + | "++" { pass_zero(); + if !current_line_started + then + (start_line true; TInc (get_current_line_type lexbuf)) + else (patch_or_match PATCH; + add_current_line_type D.PLUSPLUS; token lexbuf) } | "--" { start_line true; TDec (get_current_line_type lexbuf) } | "=" { start_line true; TEq (get_current_line_type lexbuf) } @@ -574,8 +585,8 @@ rule token = parse | ":" { start_line true; TDotDot (get_current_line_type lexbuf) } - | "==" { start_line true; TEqEq (get_current_line_type lexbuf) } - | "!=" { start_line true; TNotEq (get_current_line_type lexbuf) } + | "==" { start_line true; TEqEq (get_current_line_type lexbuf) } + | "!=" { start_line true; TNotEq (get_current_line_type lexbuf) } | ">=" { start_line true; TLogOp(Ast.SupEq,get_current_line_type lexbuf) } | "<=" { start_line true; @@ -741,7 +752,7 @@ and comment = parse (* noteopti: *) | [^ '*'] { start_line true; let s = tok lexbuf in s ^ comment lexbuf } | [ '*'] { start_line true; let s = tok lexbuf in s ^ comment lexbuf } - | _ + | _ { start_line true; let s = tok lexbuf in Common.pr2 ("LEXER: unrecognised symbol in comment:"^s); s ^ comment lexbuf diff --git a/parsing_cocci/lexer_script.mll b/parsing_cocci/lexer_script.mll index e7b6816..77ba3e3 100644 --- a/parsing_cocci/lexer_script.mll +++ b/parsing_cocci/lexer_script.mll @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) { diff --git a/parsing_cocci/main.ml b/parsing_cocci/main.ml index a7f31c6..b4ba616 100644 --- a/parsing_cocci/main.ml +++ b/parsing_cocci/main.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* ----------------------------------------------------------------------- *) diff --git a/parsing_cocci/merge.ml b/parsing_cocci/merge.ml index 04e0f39..21d61ed 100644 --- a/parsing_cocci/merge.ml +++ b/parsing_cocci/merge.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* given parsed minus code and a stream of + code, figure out where to put diff --git a/parsing_cocci/merge.mli b/parsing_cocci/merge.mli index edff023..22ca2f8 100644 --- a/parsing_cocci/merge.mli +++ b/parsing_cocci/merge.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val do_merge : Ast0_cocci.rule -> (Ast_cocci.anything * int * int * int * int) list list list -> diff --git a/parsing_cocci/parse_aux.ml b/parsing_cocci/parse_aux.ml index 3837305..bb734e4 100644 --- a/parsing_cocci/parse_aux.ml +++ b/parsing_cocci/parse_aux.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* exports everything, used only by parser_cocci_menhir.mly *) @@ -30,7 +30,7 @@ type idinfo = Ast.meta_name * Data.iconstraints * Ast0.pure * Data.clt type expinfo = Ast.meta_name * Data.econstraints * Ast0.pure * Data.clt type tyinfo = Ast.meta_name * Ast0.typeC list * Ast0.pure * Data.clt type list_info = Ast.meta_name * Ast.meta_name option * Ast0.pure * Data.clt -type typed_info = +type typed_expinfo = Ast.meta_name * Data.econstraints * Ast0.pure * Type_cocci.typeC list option * Data.clt type pos_info = Ast.meta_name * Data.pconstraints * Ast.meta_collect * Data.clt @@ -70,8 +70,11 @@ let clt2mcode str = function (str,Ast0.UNIQUE,make_info line lline offset col strbef straft, Ast0.MINUS(ref([],Ast0.default_token_info)),ref pos,-1) | (Data.PLUS,line,lline,offset,col,strbef,straft,pos) -> - (str,Ast0.NONE,make_info line lline offset col strbef straft,Ast0.PLUS, - ref pos,-1) + (str,Ast0.NONE,make_info line lline offset col strbef straft, + Ast0.PLUS(Ast.ONE),ref pos,-1) + | (Data.PLUSPLUS,line,lline,offset,col,strbef,straft,pos) -> + (str,Ast0.NONE,make_info line lline offset col strbef straft, + Ast0.PLUS(Ast.MANY),ref pos,-1) | (Data.CONTEXT,line,lline,offset,col,strbef,straft,pos) -> (str,Ast0.NONE,make_info line lline offset col strbef straft, Ast0.CONTEXT(ref(Ast.NOTHING, @@ -353,17 +356,17 @@ let create_fresh_metadec kindfn ids current_rule = kindfn rule checker seed) ids) -let create_metadec_ne ar ispure kindfn ids current_rule = +let create_metadec_with_constraints ar ispure kindfn ids current_rule = List.concat (List.map (function ((rule,nm),constraints) -> let (rule,checker) = match rule with - None -> ((current_rule,nm),function x -> [Common.Left x]) - | Some rule -> - ((rule,nm), - function x -> check_meta x; [Common.Right x]) in - kindfn ar rule ispure checker constraints) + None -> ((current_rule,nm),function x -> [Common.Left x]) + | Some rule -> + ((rule,nm), + function x -> check_meta x; [Common.Right x]) in + kindfn ar rule ispure checker constraints) ids) let create_metadec_ty ar ispure kindfn ids current_rule = diff --git a/parsing_cocci/parse_cocci.ml b/parsing_cocci/parse_cocci.ml index 5ab5251..713e020 100644 --- a/parsing_cocci/parse_cocci.ml +++ b/parsing_cocci/parse_cocci.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* splits the entire file into minus and plus fragments, and parses each @@ -46,6 +46,7 @@ let line_type2c tok = match line_type tok with D.MINUS | D.OPTMINUS | D.UNIQUEMINUS -> ":-" | D.PLUS -> ":+" + | D.PLUSPLUS -> ":++" | D.CONTEXT | D.UNIQUE | D.OPT -> "" let token2c (tok,_) = @@ -73,6 +74,7 @@ let token2c (tok,_) = | PC.TName -> "name" | PC.TRuleName str -> "rule_name-"^str | PC.TUsing -> "using" + | PC.TVirtual -> "virtual" | PC.TPathIsoFile str -> "path_iso_file-"^str | PC.TDisable -> "disable" | PC.TExtends -> "extends" @@ -154,6 +156,8 @@ let token2c (tok,_) = | PC.TAnd (clt) -> "&"^(line_type2c clt) | PC.TEqEq(clt) -> "=="^(line_type2c clt) | PC.TNotEq(clt) -> "!="^(line_type2c clt) + | PC.TTildeEq(clt) -> "~="^(line_type2c clt) + | PC.TTildeExclEq(clt) -> "~!="^(line_type2c clt) | PC.TLogOp(op,clt) -> (match op with Ast.Inf -> "<" @@ -300,7 +304,7 @@ let plus_attachable only_plus (tok,_) = | PC.TString(_,clt) | PC.TChar(_,clt) | PC.TFloat(_,clt) | PC.TInt(_,clt) | PC.TOrLog(clt) | PC.TAndLog(clt) | PC.TOr(clt) | PC.TXor(clt) - | PC.TAnd (clt) | PC.TEqEq(clt) | PC.TNotEq(clt) | PC.TLogOp(_,clt) + | PC.TAnd (clt) | PC.TEqEq(clt) | PC.TNotEq(clt) | PC.TTildeEq(clt) | PC.TLogOp(_,clt) | PC.TShOp(_,clt) | PC.TPlus(clt) | PC.TMinus(clt) | PC.TMul(clt) | PC.TDmOp(_,clt) | PC.TTilde (clt) @@ -328,7 +332,7 @@ let plus_attachable only_plus (tok,_) = | PC.TEq(clt) | PC.TAssign(_,clt) | PC.TDot(clt) | PC.TComma(clt) | PC.TPtVirg(clt) -> - if line_type clt = D.PLUS + if List.mem (line_type clt) [D.PLUS;D.PLUSPLUS] then PLUS else if only_plus then NOTPLUS else if line_type clt = D.CONTEXT then PLUS else NOTPLUS @@ -365,7 +369,7 @@ let get_clt (tok,_) = | PC.TString(_,clt) | PC.TChar(_,clt) | PC.TFloat(_,clt) | PC.TInt(_,clt) | PC.TOrLog(clt) | PC.TAndLog(clt) | PC.TOr(clt) | PC.TXor(clt) - | PC.TAnd (clt) | PC.TEqEq(clt) | PC.TNotEq(clt) | PC.TLogOp(_,clt) + | PC.TAnd (clt) | PC.TEqEq(clt) | PC.TNotEq(clt) | PC.TTildeEq(clt) | PC.TLogOp(_,clt) | PC.TShOp(_,clt) | PC.TPlus(clt) | PC.TMinus(clt) | PC.TMul(clt) | PC.TDmOp(_,clt) | PC.TTilde (clt) @@ -466,6 +470,7 @@ let update_clt (tok,x) clt = | PC.TAnd (_) -> (PC.TAnd (clt),x) | PC.TEqEq(_) -> (PC.TEqEq(clt),x) | PC.TNotEq(_) -> (PC.TNotEq(clt),x) + | PC.TTildeEq(_) -> (PC.TTildeEq(clt),x) | PC.TLogOp(op,_) -> (PC.TLogOp(op,clt),x) | PC.TShOp(op,_) -> (PC.TShOp(op,clt),x) | PC.TPlus(_) -> (PC.TPlus(clt),x) @@ -588,7 +593,7 @@ let split t clt = let (d,_,_,_,_,_,_,_) = clt in match d with D.MINUS | D.OPTMINUS | D.UNIQUEMINUS -> ([t],[]) - | D.PLUS -> ([],[t]) + | D.PLUS | D.PLUSPLUS -> ([],[t]) | D.CONTEXT | D.UNIQUE | D.OPT -> ([t],[t]) let split_token ((tok,_) as t) = @@ -598,8 +603,8 @@ let split_token ((tok,_) as t) = | PC.TFunction | PC.TTypedef | PC.TDeclarer | PC.TIterator | PC.TName | PC.TType | PC.TParameter | PC.TLocal | PC.Tlist | PC.TFresh | PC.TCppConcatOp | PC.TPure - | PC.TContext | PC.TRuleName(_) | PC.TUsing | PC.TDisable | PC.TExtends - | PC.TPathIsoFile(_) + | PC.TContext | PC.TRuleName(_) | PC.TUsing | PC.TVirtual | PC.TDisable + | PC.TExtends | PC.TPathIsoFile(_) | PC.TDepends | PC.TOn | PC.TEver | PC.TNever | PC.TExists | PC.TForall | PC.TError | PC.TWords | PC.TGenerated | PC.TNothing -> ([t],[t]) @@ -658,7 +663,7 @@ let split_token ((tok,_) as t) = split t clt | PC.TOrLog(clt) | PC.TAndLog(clt) | PC.TOr(clt) | PC.TXor(clt) - | PC.TAnd (clt) | PC.TEqEq(clt) | PC.TNotEq(clt) | PC.TLogOp(_,clt) + | PC.TAnd (clt) | PC.TEqEq(clt) | PC.TNotEq(clt) | PC.TTildeEq(clt) | PC.TTildeExclEq(clt) | PC.TLogOp(_,clt) | PC.TShOp(_,clt) | PC.TPlus(clt) | PC.TMinus(clt) | PC.TMul(clt) | PC.TDmOp(_,clt) | PC.TTilde (clt) -> split t clt @@ -1101,7 +1106,7 @@ let minus_to_nothing l = let (d,_,_,_,_,_,_,_) = get_clt tok in (match d with D.MINUS | D.OPTMINUS | D.UNIQUEMINUS -> true - | D.PLUS -> false + | D.PLUS | D.PLUSPLUS -> false | D.CONTEXT | D.UNIQUE | D.OPT -> false) with _ -> false in let rec minus_loop = function @@ -1250,7 +1255,7 @@ let rec consume_minus_positions = function let any_modif rule = let mcode x = match Ast0.get_mcode_mcodekind x with - Ast0.MINUS _ | Ast0.PLUS -> true + Ast0.MINUS _ | Ast0.PLUS _ -> true | _ -> false in let donothing r k e = k e in let bind x y = x or y in @@ -1263,6 +1268,27 @@ let any_modif rule = donothing donothing in List.exists fn.VT0.combiner_rec_top_level rule +let eval_virt virt = + List.iter + (function x -> + if not (List.mem x virt) + then + failwith + (Printf.sprintf "unknown virtual rule %s\n" x)) + (!Flag_parsing_cocci.defined_virtual_rules @ + !Flag_parsing_cocci.undefined_virtual_rules); + List.map + (function x -> + if List.mem x !Flag_parsing_cocci.defined_virtual_rules + then (x,true) + else if List.mem x !Flag_parsing_cocci.undefined_virtual_rules + then (x,false) + else + (*Printf.fprintf stderr + "warning: no value specified for virtual rule %s, assuming unmatched\n" x;*) + (x,false)) + virt + let drop_last extra l = List.rev(extra@(List.tl(List.rev l))) let partition_either l = @@ -1423,16 +1449,24 @@ let rec parse file = let include_and_iso_files = parse_one "include and iso file names" PC.include_main file data in - let (include_files,iso_files) = + let (include_files,iso_files,virt) = List.fold_left - (function (include_files,iso_files) -> + (function (include_files,iso_files,virt) -> function - Data.Include s -> (s::include_files,iso_files) - | Data.Iso s -> (include_files,s::iso_files)) - ([],[]) include_and_iso_files in - - let (extra_iso_files, extra_rules) = - List.split (List.map parse include_files) in + Data.Include s -> (s::include_files,iso_files,virt) + | Data.Iso s -> (include_files,s::iso_files,virt) + | Data.Virt l -> (include_files,iso_files,l@virt)) + ([],[],[]) include_and_iso_files in + List.iter (function x -> Hashtbl.add Lexer_cocci.rule_names x ()) + virt; + + let (extra_iso_files, extra_rules, extra_virt) = + let rec loop = function + [] -> ([],[],[]) + | (a,b,c)::rest -> + let (x,y,z) = loop rest in + (a::x,b::y,c::z) in + loop (List.map parse include_files) in let parse_cocci_rule ruletype old_metas (rule_name, dependencies, iso, dropiso, exists, is_expression) = @@ -1604,12 +1638,12 @@ let rec parse file = (List.fold_left (function prev -> function cur -> Common.union_set cur prev) iso_files extra_iso_files, - List.fold_left - (function prev -> function cur -> cur @ prev) - (loop [] (x = PC.TArob)) extra_rules) + (* included rules first *) + List.fold_left (@) (loop [] (x = PC.TArob)) (List.rev extra_rules), + List.fold_left (@) virt extra_virt (*no dups allowed*)) | _ -> failwith "unexpected code before the first rule\n") | (false,[(PC.TArobArob,_)]) | (false,[(PC.TArob,_)]) -> - ([],([] : Ast0.parsed_rule list)) + ([],([] : Ast0.parsed_rule list),[] (*virtual rules*)) | _ -> failwith "unexpected code before the first rule\n" in res) @@ -1617,7 +1651,8 @@ let rec parse file = let process file isofile verbose = let extra_path = Filename.dirname file in Lexer_cocci.init(); - let (iso_files, rules) = parse file in + let (iso_files, rules, virt) = parse file in + let virt = eval_virt virt in let std_isos = match isofile with None -> [] @@ -1715,6 +1750,7 @@ let process file isofile verbose = let minus_ast = Ast0toast.ast0toast rule_name dependencies dropped_isos exists minus is_exp ruletype in + match function_prototypes with None -> [(extra_meta @ metavars, minus_ast)] | Some mv_fp -> [(extra_meta @ metavars, minus_ast); mv_fp]) @@ -1731,6 +1767,7 @@ let process file isofile verbose = Common.profile_code "get_constants" (fun () -> Get_constants.get_constants code) in (* for grep *) let glimpse_tokens2 = - Common.profile_code "get_glimpse_constants" - (fun () -> Get_constants2.get_constants code neg_pos) in(* for glimpse *) - (metavars,code,fvs,neg_pos,ua,pos,grep_tokens,glimpse_tokens2) + Common.profile_code "get_glimpse_constants" (* for glimpse *) + (fun () -> Get_constants2.get_constants code neg_pos virt) in + + (metavars,code,fvs,neg_pos,ua,pos,grep_tokens,glimpse_tokens2,virt) diff --git a/parsing_cocci/parse_cocci.mli b/parsing_cocci/parse_cocci.mli index ef5e003..6becf03 100644 --- a/parsing_cocci/parse_cocci.mli +++ b/parsing_cocci/parse_cocci.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val process : string (* filename *) -> string option (* iso filename *) -> bool (* verbose? *) -> @@ -11,4 +33,5 @@ val process : Ast_cocci.meta_name list list list) * Ast_cocci.meta_name list list list (*positions list*) * string list list (* non metavars in - code, for grep *) * - string option (* non metavars in - code, for glimpse *) + string list option (* non metavars in - code, for glimpse/google *) * + (string * bool) list (* virtual rule info *) diff --git a/parsing_cocci/parser_cocci.mly b/parsing_cocci/parser_cocci.mly index b907736..24ac4a7 100644 --- a/parsing_cocci/parser_cocci.mly +++ b/parsing_cocci/parser_cocci.mly @@ -1,23 +1,23 @@ /* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*/ + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + */ %{ diff --git a/parsing_cocci/parser_cocci_menhir.ml b/parsing_cocci/parser_cocci_menhir.ml index 1aad015..8b8f66a 100644 --- a/parsing_cocci/parser_cocci_menhir.ml +++ b/parsing_cocci/parser_cocci_menhir.ml @@ -139,283 +139,294 @@ type token = (Data.clt) # 141 "parser_cocci_menhir.ml" ) + | TVirtual | TUsing | TTypedef | TTypeId of ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 148 "parser_cocci_menhir.ml" +# 149 "parser_cocci_menhir.ml" ) | TType + | TTildeExclEq of ( +# 94 "parser_cocci_menhir.mly" + (Data.clt) +# 155 "parser_cocci_menhir.ml" +) + | TTildeEq of ( +# 94 "parser_cocci_menhir.mly" + (Data.clt) +# 160 "parser_cocci_menhir.ml" +) | TTilde of ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 154 "parser_cocci_menhir.ml" +# 165 "parser_cocci_menhir.ml" ) | TSwitch of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 159 "parser_cocci_menhir.ml" +# 170 "parser_cocci_menhir.ml" ) | TString of ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 164 "parser_cocci_menhir.ml" +# 175 "parser_cocci_menhir.ml" ) | TStrict of ( # 74 "parser_cocci_menhir.mly" (Data.clt) -# 169 "parser_cocci_menhir.ml" +# 180 "parser_cocci_menhir.ml" ) | TStatement | TSizeof of ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 175 "parser_cocci_menhir.ml" +# 186 "parser_cocci_menhir.ml" ) | TShOp of ( # 96 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 180 "parser_cocci_menhir.ml" +# 191 "parser_cocci_menhir.ml" ) | TScriptData of ( # 71 "parser_cocci_menhir.mly" (string) -# 185 "parser_cocci_menhir.ml" +# 196 "parser_cocci_menhir.ml" ) | TScript | TRuleName of ( # 47 "parser_cocci_menhir.mly" (string) -# 191 "parser_cocci_menhir.ml" +# 202 "parser_cocci_menhir.ml" ) | TRightIso | TReturn of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 197 "parser_cocci_menhir.ml" +# 208 "parser_cocci_menhir.ml" ) | TPure | TPtrOp of ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 203 "parser_cocci_menhir.ml" +# 214 "parser_cocci_menhir.ml" ) | TPtVirg of ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 208 "parser_cocci_menhir.ml" +# 219 "parser_cocci_menhir.ml" ) | TPragma of ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 213 "parser_cocci_menhir.ml" +# 224 "parser_cocci_menhir.ml" ) | TPosition | TPosAny | TPlusFile of ( # 83 "parser_cocci_menhir.mly" (string * Data.clt) -# 220 "parser_cocci_menhir.ml" +# 231 "parser_cocci_menhir.ml" ) | TPlus0 | TPlus of ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 226 "parser_cocci_menhir.ml" +# 237 "parser_cocci_menhir.ml" ) | TPathIsoFile of ( # 79 "parser_cocci_menhir.mly" (string) -# 231 "parser_cocci_menhir.ml" +# 242 "parser_cocci_menhir.ml" ) | TParameter | TPOEllipsis of ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 237 "parser_cocci_menhir.ml" +# 248 "parser_cocci_menhir.ml" ) | TPCEllipsis of ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 242 "parser_cocci_menhir.ml" +# 253 "parser_cocci_menhir.ml" ) | TPArob | TOrLog of ( # 89 "parser_cocci_menhir.mly" (Data.clt) -# 248 "parser_cocci_menhir.ml" +# 259 "parser_cocci_menhir.ml" ) | TOr of ( # 91 "parser_cocci_menhir.mly" (Data.clt) -# 253 "parser_cocci_menhir.ml" +# 264 "parser_cocci_menhir.ml" ) | TOn | TOPar0 of ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 259 "parser_cocci_menhir.ml" +# 270 "parser_cocci_menhir.ml" ) | TOPar of ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 264 "parser_cocci_menhir.ml" +# 275 "parser_cocci_menhir.ml" ) | TOInit of ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 269 "parser_cocci_menhir.ml" +# 280 "parser_cocci_menhir.ml" ) | TOEllipsis of ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 274 "parser_cocci_menhir.ml" +# 285 "parser_cocci_menhir.ml" ) | TOCro of ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 279 "parser_cocci_menhir.ml" +# 290 "parser_cocci_menhir.ml" ) | TOBrace of ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 284 "parser_cocci_menhir.ml" +# 295 "parser_cocci_menhir.ml" ) | TNothing | TNotEq of ( # 94 "parser_cocci_menhir.mly" (Data.clt) -# 290 "parser_cocci_menhir.ml" +# 301 "parser_cocci_menhir.ml" ) | TNever | TName | TMul of ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 297 "parser_cocci_menhir.ml" +# 308 "parser_cocci_menhir.ml" ) | TMinusFile of ( # 83 "parser_cocci_menhir.mly" (string * Data.clt) -# 302 "parser_cocci_menhir.ml" +# 313 "parser_cocci_menhir.ml" ) | TMinus of ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 307 "parser_cocci_menhir.ml" +# 318 "parser_cocci_menhir.ml" ) | TMid0 of ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 312 "parser_cocci_menhir.ml" +# 323 "parser_cocci_menhir.ml" ) | TMetaType of ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 317 "parser_cocci_menhir.ml" +# 328 "parser_cocci_menhir.ml" ) | TMetaStmList of ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 322 "parser_cocci_menhir.ml" +# 333 "parser_cocci_menhir.ml" ) | TMetaStm of ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 327 "parser_cocci_menhir.ml" +# 338 "parser_cocci_menhir.ml" ) | TMetaPos of ( # 68 "parser_cocci_menhir.mly" (Parse_aux.pos_info) -# 332 "parser_cocci_menhir.ml" +# 343 "parser_cocci_menhir.ml" ) | TMetaParamList of ( # 66 "parser_cocci_menhir.mly" (Parse_aux.list_info) -# 337 "parser_cocci_menhir.ml" +# 348 "parser_cocci_menhir.ml" ) | TMetaParam of ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 342 "parser_cocci_menhir.ml" +# 353 "parser_cocci_menhir.ml" ) | TMetaLocalIdExp of ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 347 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 358 "parser_cocci_menhir.ml" ) | TMetaLocalFunc of ( # 61 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 352 "parser_cocci_menhir.ml" +# 363 "parser_cocci_menhir.ml" ) | TMetaIterator of ( # 62 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 357 "parser_cocci_menhir.ml" +# 368 "parser_cocci_menhir.ml" ) | TMetaInit of ( # 65 "parser_cocci_menhir.mly" (Parse_aux.info) -# 362 "parser_cocci_menhir.ml" +# 373 "parser_cocci_menhir.ml" ) | TMetaIdExp of ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 367 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 378 "parser_cocci_menhir.ml" ) | TMetaId of ( # 61 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 372 "parser_cocci_menhir.ml" +# 383 "parser_cocci_menhir.ml" ) | TMetaFunc of ( # 61 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 377 "parser_cocci_menhir.ml" +# 388 "parser_cocci_menhir.ml" ) | TMetaExpList of ( # 66 "parser_cocci_menhir.mly" (Parse_aux.list_info) -# 382 "parser_cocci_menhir.ml" +# 393 "parser_cocci_menhir.ml" ) | TMetaExp of ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 387 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 398 "parser_cocci_menhir.ml" ) | TMetaErr of ( # 63 "parser_cocci_menhir.mly" (Parse_aux.expinfo) -# 392 "parser_cocci_menhir.ml" +# 403 "parser_cocci_menhir.ml" ) | TMetaDeclarer of ( # 62 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 397 "parser_cocci_menhir.ml" +# 408 "parser_cocci_menhir.ml" ) | TMetaConst of ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 402 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 413 "parser_cocci_menhir.ml" ) | TMPtVirg | TLogOp of ( # 95 "parser_cocci_menhir.mly" (Ast_cocci.logicalOp * Data.clt) -# 408 "parser_cocci_menhir.ml" +# 419 "parser_cocci_menhir.ml" ) | TLocal | TLineEnd of ( # 74 "parser_cocci_menhir.mly" (Data.clt) -# 414 "parser_cocci_menhir.ml" +# 425 "parser_cocci_menhir.ml" ) | TIteratorId of ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 419 "parser_cocci_menhir.ml" +# 430 "parser_cocci_menhir.ml" ) | TIterator | TIsoType @@ -430,60 +441,60 @@ type token = | TInt of ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 434 "parser_cocci_menhir.ml" +# 445 "parser_cocci_menhir.ml" ) | TInitialize | TInitialiser | TIncludeNL of ( # 80 "parser_cocci_menhir.mly" (string * Data.clt) -# 441 "parser_cocci_menhir.ml" +# 452 "parser_cocci_menhir.ml" ) | TIncludeL of ( # 80 "parser_cocci_menhir.mly" (string * Data.clt) -# 446 "parser_cocci_menhir.ml" +# 457 "parser_cocci_menhir.ml" ) | TInc of ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 451 "parser_cocci_menhir.ml" +# 462 "parser_cocci_menhir.ml" ) | TIf of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 456 "parser_cocci_menhir.ml" +# 467 "parser_cocci_menhir.ml" ) | TIdentifier | TIdent of ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 462 "parser_cocci_menhir.ml" +# 473 "parser_cocci_menhir.ml" ) | TIdExpression | TGoto of ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 468 "parser_cocci_menhir.ml" +# 479 "parser_cocci_menhir.ml" ) | TGenerated | TFunction | TFunDecl of ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 475 "parser_cocci_menhir.ml" +# 486 "parser_cocci_menhir.ml" ) | TFresh | TForall | TFor of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 482 "parser_cocci_menhir.ml" +# 493 "parser_cocci_menhir.ml" ) | TFloat of ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 487 "parser_cocci_menhir.ml" +# 498 "parser_cocci_menhir.ml" ) | TFinalize | TExtends @@ -494,151 +505,151 @@ type token = | TEqEq of ( # 94 "parser_cocci_menhir.mly" (Data.clt) -# 498 "parser_cocci_menhir.ml" +# 509 "parser_cocci_menhir.ml" ) | TEq of ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 503 "parser_cocci_menhir.ml" +# 514 "parser_cocci_menhir.ml" ) | TElse of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 508 "parser_cocci_menhir.ml" +# 519 "parser_cocci_menhir.ml" ) | TEllipsis of ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 513 "parser_cocci_menhir.ml" +# 524 "parser_cocci_menhir.ml" ) | TDotDot of ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 518 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.ml" ) | TDot of ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 523 "parser_cocci_menhir.ml" +# 534 "parser_cocci_menhir.ml" ) | TDo of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 528 "parser_cocci_menhir.ml" +# 539 "parser_cocci_menhir.ml" ) | TDmOp of ( # 97 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 533 "parser_cocci_menhir.ml" +# 544 "parser_cocci_menhir.ml" ) | TDisable | TDepends | TDefineParam of ( # 82 "parser_cocci_menhir.mly" (Data.clt * token * int * int) -# 540 "parser_cocci_menhir.ml" +# 551 "parser_cocci_menhir.ml" ) | TDefine of ( # 81 "parser_cocci_menhir.mly" (Data.clt * token) -# 545 "parser_cocci_menhir.ml" +# 556 "parser_cocci_menhir.ml" ) | TDefault of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 550 "parser_cocci_menhir.ml" +# 561 "parser_cocci_menhir.ml" ) | TDeclarerId of ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 555 "parser_cocci_menhir.ml" +# 566 "parser_cocci_menhir.ml" ) | TDeclarer | TDec of ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 561 "parser_cocci_menhir.ml" +# 572 "parser_cocci_menhir.ml" ) | TCppConcatOp | TContinue of ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 567 "parser_cocci_menhir.ml" +# 578 "parser_cocci_menhir.ml" ) | TContext | TConstant | TComma of ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 574 "parser_cocci_menhir.ml" +# 585 "parser_cocci_menhir.ml" ) | TChar of ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 579 "parser_cocci_menhir.ml" +# 590 "parser_cocci_menhir.ml" ) | TCase of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 584 "parser_cocci_menhir.ml" +# 595 "parser_cocci_menhir.ml" ) | TCPar0 of ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 589 "parser_cocci_menhir.ml" +# 600 "parser_cocci_menhir.ml" ) | TCPar of ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 594 "parser_cocci_menhir.ml" +# 605 "parser_cocci_menhir.ml" ) | TCEllipsis of ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 599 "parser_cocci_menhir.ml" +# 610 "parser_cocci_menhir.ml" ) | TCCro of ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 604 "parser_cocci_menhir.ml" +# 615 "parser_cocci_menhir.ml" ) | TCBrace of ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 609 "parser_cocci_menhir.ml" +# 620 "parser_cocci_menhir.ml" ) | TBreak of ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 614 "parser_cocci_menhir.ml" +# 625 "parser_cocci_menhir.ml" ) | TBang0 | TBang of ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 620 "parser_cocci_menhir.ml" +# 631 "parser_cocci_menhir.ml" ) | TAssign of ( # 108 "parser_cocci_menhir.mly" (Ast_cocci.assignOp * Data.clt) -# 625 "parser_cocci_menhir.ml" +# 636 "parser_cocci_menhir.ml" ) | TArobArob | TArob | TAny of ( # 74 "parser_cocci_menhir.mly" (Data.clt) -# 632 "parser_cocci_menhir.ml" +# 643 "parser_cocci_menhir.ml" ) | TAndLog of ( # 90 "parser_cocci_menhir.mly" (Data.clt) -# 637 "parser_cocci_menhir.ml" +# 648 "parser_cocci_menhir.ml" ) | TAnd of ( # 93 "parser_cocci_menhir.mly" (Data.clt) -# 642 "parser_cocci_menhir.ml" +# 653 "parser_cocci_menhir.ml" ) | EOF @@ -660,7 +671,7 @@ module Ast0 = Ast0_cocci module Ast = Ast_cocci module P = Parse_aux -# 664 "parser_cocci_menhir.ml" +# 675 "parser_cocci_menhir.ml" let _eRR = Error @@ -674,288 +685,294 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct fun _tok -> match _tok with | EOF -> - 172 + 175 | TAnd _ -> - 171 + 174 | TAndLog _ -> - 170 + 173 | TAny _ -> - 169 + 172 | TArob -> - 168 + 171 | TArobArob -> - 167 + 170 | TAssign _ -> - 166 + 169 | TBang _ -> - 165 + 168 | TBang0 -> - 164 + 167 | TBreak _ -> - 163 + 166 | TCBrace _ -> - 162 + 165 | TCCro _ -> - 161 + 164 | TCEllipsis _ -> - 160 + 163 | TCPar _ -> - 159 + 162 | TCPar0 _ -> - 158 + 161 | TCase _ -> - 157 + 160 | TChar _ -> - 156 + 159 | TComma _ -> - 155 + 158 | TConstant -> - 154 + 157 | TContext -> - 153 + 156 | TContinue _ -> - 152 + 155 | TCppConcatOp -> - 151 + 154 | TDec _ -> - 150 + 153 | TDeclarer -> - 149 + 152 | TDeclarerId _ -> - 148 + 151 | TDefault _ -> - 147 + 150 | TDefine _ -> - 146 + 149 | TDefineParam _ -> - 145 + 148 | TDepends -> - 144 + 147 | TDisable -> - 143 + 146 | TDmOp _ -> - 142 + 145 | TDo _ -> - 141 + 144 | TDot _ -> - 140 + 143 | TDotDot _ -> - 139 + 142 | TEllipsis _ -> - 138 + 141 | TElse _ -> - 137 + 140 | TEq _ -> - 136 + 139 | TEqEq _ -> - 135 + 138 | TError -> - 134 + 137 | TEver -> - 133 + 136 | TExists -> - 132 + 135 | TExpression -> - 131 + 134 | TExtends -> - 130 + 133 | TFinalize -> - 129 + 132 | TFloat _ -> - 128 + 131 | TFor _ -> - 127 + 130 | TForall -> - 126 + 129 | TFresh -> - 125 + 128 | TFunDecl _ -> - 124 + 127 | TFunction -> - 123 + 126 | TGenerated -> - 122 + 125 | TGoto _ -> - 121 + 124 | TIdExpression -> - 120 + 123 | TIdent _ -> - 119 + 122 | TIdentifier -> - 118 + 121 | TIf _ -> - 117 + 120 | TInc _ -> - 116 + 119 | TIncludeL _ -> - 115 + 118 | TIncludeNL _ -> - 114 + 117 | TInitialiser -> - 113 + 116 | TInitialize -> - 112 + 115 | TInt _ -> - 111 + 114 | TInvalid -> - 110 + 113 | TIso -> - 109 + 112 | TIsoArgExpression -> - 108 + 111 | TIsoDeclaration -> - 107 + 110 | TIsoExpression -> - 106 + 109 | TIsoStatement -> - 105 + 108 | TIsoTestExpression -> - 104 + 107 | TIsoTopLevel -> - 103 + 106 | TIsoType -> - 102 + 105 | TIterator -> - 101 + 104 | TIteratorId _ -> - 100 + 103 | TLineEnd _ -> - 99 + 102 | TLocal -> - 98 + 101 | TLogOp _ -> - 97 + 100 | TMPtVirg -> - 96 + 99 | TMetaConst _ -> - 95 + 98 | TMetaDeclarer _ -> - 94 + 97 | TMetaErr _ -> - 93 + 96 | TMetaExp _ -> - 92 + 95 | TMetaExpList _ -> - 91 + 94 | TMetaFunc _ -> - 90 + 93 | TMetaId _ -> - 89 + 92 | TMetaIdExp _ -> - 88 + 91 | TMetaInit _ -> - 87 + 90 | TMetaIterator _ -> - 86 + 89 | TMetaLocalFunc _ -> - 85 + 88 | TMetaLocalIdExp _ -> - 84 + 87 | TMetaParam _ -> - 83 + 86 | TMetaParamList _ -> - 82 + 85 | TMetaPos _ -> - 81 + 84 | TMetaStm _ -> - 80 + 83 | TMetaStmList _ -> - 79 + 82 | TMetaType _ -> - 78 + 81 | TMid0 _ -> - 77 + 80 | TMinus _ -> - 76 + 79 | TMinusFile _ -> - 75 + 78 | TMul _ -> - 74 + 77 | TName -> - 73 + 76 | TNever -> - 72 + 75 | TNotEq _ -> - 71 + 74 | TNothing -> - 70 + 73 | TOBrace _ -> - 69 + 72 | TOCro _ -> - 68 + 71 | TOEllipsis _ -> - 67 + 70 | TOInit _ -> - 66 + 69 | TOPar _ -> - 65 + 68 | TOPar0 _ -> - 64 + 67 | TOn -> - 63 + 66 | TOr _ -> - 62 + 65 | TOrLog _ -> - 61 + 64 | TPArob -> - 60 + 63 | TPCEllipsis _ -> - 59 + 62 | TPOEllipsis _ -> - 58 + 61 | TParameter -> - 57 + 60 | TPathIsoFile _ -> - 56 + 59 | TPlus _ -> - 55 + 58 | TPlus0 -> - 54 + 57 | TPlusFile _ -> - 53 + 56 | TPosAny -> - 52 + 55 | TPosition -> - 51 + 54 | TPragma _ -> - 50 + 53 | TPtVirg _ -> - 49 + 52 | TPtrOp _ -> - 48 + 51 | TPure -> - 47 + 50 | TReturn _ -> - 46 + 49 | TRightIso -> - 45 + 48 | TRuleName _ -> - 44 + 47 | TScript -> - 43 + 46 | TScriptData _ -> - 42 + 45 | TShOp _ -> - 41 + 44 | TSizeof _ -> - 40 + 43 | TStatement -> - 39 + 42 | TStrict _ -> - 38 + 41 | TString _ -> - 37 + 40 | TSwitch _ -> - 36 + 39 | TTilde _ -> - 35 + 38 + | TTildeEq _ -> + 37 + | TTildeExclEq _ -> + 36 | TType -> - 34 + 35 | TTypeId _ -> - 33 + 34 | TTypedef -> - 32 + 33 | TUsing -> + 32 + | TVirtual -> 31 | TWhen _ -> 30 @@ -1300,6 +1317,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Obj.repr _v | TTilde _v -> Obj.repr _v + | TTildeEq _v -> + Obj.repr _v + | TTildeExclEq _v -> + Obj.repr _v | TType -> Obj.repr () | TTypeId _v -> @@ -1308,6 +1329,8 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Obj.repr () | TUsing -> Obj.repr () + | TVirtual -> + Obj.repr () | TWhen _v -> Obj.repr _v | TWhenFalse _v -> @@ -1370,19 +1393,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Obj.repr _v let default_reduction = - (16, "\000\000\000\000\001G\001H\001F\000\000\001J\001I\000\001\000\000\001\133\000\000\000\000\000\137\000\000\000\000\001u\000\162\000\000\000\000\000\149\000\000\000\000\000\154\000\153\000\000\000\150\000\000\000\148\000\000\000\000\000\000\000\152\000\000\000\151\003\n\003\t\000\000\000\000\000\142\000\000\000\000\000\147\000\146\000\000\000\143\000\000\000\141\000\000\000\000\000\000\000\145\000\000\000\144\000\000\000\156\000\000\000\000\000\161\000\160\000\000\000\157\000\000\000\164\000\000\001C\002\151\001B\000\000\000\165\000\000\000\163\000\136\000\000\000\155\000\000\000\170\000\000\000\000\000\000\000\159\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\003\005\000\000\000\000\000\167\000\000\003\007\000\000\000\000\000\000\003\130\002a\000\000\003\128\000\000\002{\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\127\003\129\002g\001>\002f\001<\001=\002e\002d\002c\002_\000\000\000\000\002`\001\011\000\000\002b\000\000\003~\000\000\000c\001;\002B\000\000\000\000\002E\000\000\000\015\000\000\000\000\000\000\000\000\001\012\002^\002j\000[\000\021\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131\002#\000R\001\021\000^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\000T\000\000\000S\001\022\000\000\002H\001\023\000\014\000\016\000\000\000\000\000\192\000\000\000\000\000\179\000\000\000\000\000\184\000\183\000\000\000\180\000\000\000\178\000\000\000\000\000\000\000\182\000\000\000\181\000\000\000\000\000\172\000\000\000\000\000\177\000\176\000\000\000\173\000\000\000\171\000\000\000\000\000\000\000\175\000\000\000\174\000\000\000\186\000\000\000\000\000\191\000\190\000\000\000\187\000\000\000\194\000\000\000\000\000\195\000\000\000\193\000\000\000\185\000\000\000\200\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\199\000\000\000\000\000\139\000\000\000\000\000\000\000\000\000\000\000\000\002\n\000\208\000\000\000\000\000n\000o\002\t\001\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\219\000\214\000\000\001\237\000\000\000\000\000\000\000\000\000\207\000\205\000\220\000\000\001}\000\000\000\000\003\002\000\000\003\001\000\000\000\000\000\000\000\000\000\000\000\197\000\000\000\000\000\000\000\000\000\198\000\196\000\000\000\000\003\004\003\008\000\188\000\000\000\000\001\026\000\000\000\000\002C\002F\000\000\002D\002G\003e\003f\003d\000\000\002h\003c\000\000\002\130\000\000\000\000\002\129\002\128\002\127\002~\002}\002y\000\000\000\000\002z\000\000\002|\000\000\000\000\000g\002P\000\000\000\000\002S\000\000\000\000\002V\000\000\000\000\002Q\002T\000\000\002R\002U\002\132\002x\003s\003t\003r\003q\000h\000\000\000\000\000W\000\000\000V\001\031\000\000\001\246\000\000\000\000\000\000\000\000\000\000\001\016\001\252\000\000\000\000\001\157\000U\0001\001\t\000_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\000\0003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002i\000\000\000\203\000\000\000\000\001\231\000\000\001\147\001\212\000\000\000\000\001\230\000\000\001\145\001\211\000\000\000\000\000d\000\000\002\131\000\000\000\000\003v\003u\000\000\001\247\000\000\000\000\003h\003g\000\000\000Q\000\204\000\000\001w\000\000\003\003\000\000\000\000\000\000\000\000\000\168\000\166\000\000\001\020\000\000\000\000\000\169\000\158\000\000\000\000\001`\000\000\001_\000\000\001m\000\000\001\135\000\000\000\000\000\000\0038\000\000\000\000\003+\000\000\000\000\0030\003/\000\000\003,\000\000\003*\000\000\000\000\000\000\003.\000\000\003-\000\000\000\000\003$\000\000\000\000\003)\003(\000\000\003%\000\000\003#\000\000\000\000\000\000\003'\000\000\003&\000\000\0032\000\000\000\000\0037\0036\000\000\0033\000\000\003:\000\000\000\000\003;\000\000\0039\000\000\0031\000\000\003@\000\000\000\000\000\000\0035\000\000\000\000\003_\000\000\000\000\000\000\000\000\003?\0034\000\000\003a\000\000\000\000\002\227\003`\000\129\000\000\000\248\000\000\000\000\000\000\000\000\003=\000\000\000\000\000\000\000\000\003>\003<\000\000\000\000\003V\000\000\000\000\003I\000\000\000\000\003N\003M\000\000\003J\000\000\003H\000\000\000\000\000\000\003L\000\000\003K\000\000\000\000\003B\000\000\000\000\003G\003F\000\000\003C\000\000\003A\000\000\000\000\000\000\003E\000\000\003D\000\000\003P\000\000\000\000\003U\003T\000\000\003Q\000\000\003X\000\000\000\000\003Y\000\000\003W\000\000\003O\000\000\003^\000\000\000\000\000\000\003S\000\000\000\000\000\000\000\000\003]\003R\000\000\000\000\000\000\000\000\003[\000\000\000\000\000\000\000\000\003\\\003Z\002\252\002\254\002\255\002\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\210\000\209\000\000\000\000\000w\000\000\000\000\000\000\002n\000\000\000\000\000\000\002v\000\000\000\000\002u\000\000\003o\002t\002s\002r\002q\002p\001\\\002l\000\000\000\000\002m\000\000\002o\000\000\000\000\000\000\000\000\000\000\000e\002I\000\000\000\000\002L\000\000\000\000\002O\000\000\000\000\002J\002M\000\000\002K\002N\002w\002k\000f\003l\003m\003k\003j\003n\000\000\000\000\000\000\000\000\001\008\001\007\000\000\000\000\000\000\000\000\000\000\001R\000\000\001\018\001O\000\000\001\006\001U\000\000\000\000\000\000\001V\000\000\000\000\001W\000\000\001\129\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\000%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001X\000\000\001T\000\000\000\000\001Z\000\000\000\000\000\000\000\000\000\000\000\000\000t\000q\000r\001[\001Q\000\000\001P\000\000\000\241\000\000\002\207\000\000\000\000\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\244\000\000\000\000\000\247\000\000\000\000\000\000\000\000\000\000\000\000\001A\000\000\000\000\000\000\000\234\000\000\000\231\000\000\000\000\000\000\000\000\000\000\000\242\000\000\000\238\000\000\000\000\000\000\000\000\000\239\000\000\000\235\000\000\000\000\000\000\002\136\000\000\000\000\000\000\000\000\002\143\000\000\000\000\002\142\002\141\002\140\002\139\002\138\002\134\000\000\000\000\002\135\000\000\002\137\000\000\000\000\000i\002W\000\000\000\000\002Z\000\000\000\000\002]\000\000\000\000\002X\002[\000\000\002Y\002\\\002\145\002\133\003z\003{\003y\003x\000j\000\000\000\000\000Z\000\000\000Y\000\000\002\144\000\000\001\213\000X\000?\001\030\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003}\003|\000\000\002\243\000\000\002\242\000\000\000\000\000\000\000\000\003\137\000\000\000\000\000\000\003\138\000\000\000\018\000\000\000\000\000\000\003\133\000\000\001\159\000\000\000\000\000\000\000\221\002\233\001s\001r\001L\001K\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\247\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\001\014\000\254\000\000\001\131\000\000\000\000\000\253\000\249\000\000\001\000\000\250\000\255\000\000\002\245\000\000\002\244\002\230\000\000\000\000\000\000\000\000\000\000\002\239\000\000\000\000\000\000\000\000\002\240\002\232\000\000\002\246\000\000\002\234\000\000\000\225\000\000\002\249\000\000\001N\000\000\000\000\003\014\000\000\003\021\000\227\000\000\000\232\000\000\003\015\000\226\000\000\003\016\000\000\003\023\000\000\000\000\000\000\000\000\000\245\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\243\000\000\000\000\000\246\000\000\000\000\000\000\000\000\001@\000\000\000\000\000\000\000\233\000\000\000\230\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\236\000\223\000\222\000\000\003\024\003\025\000\000\003\026\000\000\003\027\000\000\001M\002\237\000\000\000\000\001\235\000\000\001\155\001\217\000\000\002\231\000\000\000\000\000\000\002\236\000\000\000\000\000\000\0014\000\000\001.\000\000\001/\000\000\0019\001-\0018\000\000\002\248\001:\000\000\000\228\000\000\000\000\000\000\000\000\0016\0011\001\232\000\000\0012\000\000\0013\000\000\001\149\001\214\000\000\000\000\000\000\001\242\000\000\001\240\000\000\000\000\001\244\001\238\000\000\001\245\001\239\000\000\002\250\001\248\000\000\000\224\000\000\000\000\001\233\000\000\001\151\001\215\000\000\003\134\000\000\003\131\000\000\003\132\000\019\000\020\000\000\000\000\002\186\000\000\002\185\000\000\000\000\002\188\000\000\002\187\000\000\000\000\000\000\002\019\000\000\000\000\002\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\026\000\000\000\000\002\029\000\000\002\013\000\000\000\000\002\016\000\000\000\000\000\000\002\020\000\000\000\000\002\024\000\000\000\000\001\234\000\000\000\000\002\017\000\000\000\000\002\021\002\183\002\014\000\000\002\184\000\000\000\000\000\000\000\000\002\027\000\000\002\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\025\000\000\000\000\002\028\000\000\002\012\000\000\000\000\002\015\000\000\000\000\000\000\002\018\000\000\000\000\002\022\000\000\001\153\001\216\000\000\002\189\000\000\000\000\000\000\003\135\000\017\000u\000\000\003\136\000\000\000\000\002\203\000\000\000\000\002\251\000a\000\000\000\000\000\000\000b\000\000\002\241\000\000\001y\000\000\001\127\002\238\000\000\000\000\001f\000\000\001e\000\000\001n\000\000\001\141\000\000\000\000\000\000\001d\000\000\001c\000\000\001k\000\000\001\139\000\000\000\000\000\000\001h\000\000\001g\000\000\001l\000\000\001\143\000\000\000\000\000\000\001i\000\000\000\000\000\000\001b\000\000\001a\000\000\001o\000\000\001\137\000\000\000\000\000\000\001j\000\002\000\000\000N\000O\000\000\000\000\002\163\002\167\002\171\002\159\002\156\000\000\000\000\001\180\002\168\002\175\002\160\002\174\002\158\002\173\002\162\002\154\002\161\002\170\002\157\002\164\002\155\002\166\002\172\002\169\002\165\000\128\000\000\000\000\002\225\000\000\000\000\002\197\000\000\000\000\002\199\002\198\002\181\000\000\000\000\002\229\002\152\002\153\000\000\001\192\000M\001p\000\003\000\000\000\000\002\148\000\000\002!\000\000\000\127\000\000\000\000\002\223\000\000\000\000\000\000\000y\000\000\000\000\002\211\000\000\002\006\002\005\001\175\002\179\000\000\001\208\000\000\002\149\000\000\000\000\000{\000\000\000\000\002\215\000\000\001\189\000\000\000\000\001\185\000\000\000\000\000\000\001\188\000\000\001\187\000\000\000\000\000\000\000\000\000\000\000\000\001\209\000\000\001\183\000\000\001\182\000\000\000v\000\000\000\000\002\205\000\000\000\000\001\179\000\000\000\000\000}\000\000\000\000\002\219\000\000\000\000\000\000\000z\000\000\000\000\002\213\000\000\002\002\002\001\001\171\002\177\000\000\001\195\000\000\000\000\000\000\001\191\000\000\001\197\000\000\000\000\001\186\000\000\000\000\001\193\000\000\000\000\001\194\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\001\184\000\000\001\254\000|\000\000\000\000\002\217\000\000\000\000\000\000\001E\000x\001D\000\000\000\000\002\209\000\000\002\000\001\255\001\169\002\176\000\000\000~\000\000\000\000\002\221\000\000\000\000\000\000\000\000\002\004\002\003\001\173\002\178\000\000\001\202\000\000\001\206\000\000\000\000\001\198\000\000\000\000\000\000\001\190\000\000\001\196\000\000\000\000\000\000\000\000\001\178\000\000\000\000\001\205\000\000\001\204\000\000\000\000\000\000\000\000\001\201\000\000\000\000\001\200\000\000\001\199\000\000\000\000\000\000\000\000\001\203\000\000\001\207\000\000\000\000\001q\000\004\000\000\001\181\000\005\000\000\000\000\001\"\000\006\000\000\001\221\001\222\001\220\000\000\001\219\003\011\001\165\000\000\000\007\000\000\001\224\001\225\001\223\000\000\000\000\000\000\000\000\001$\000\000\000\000\000\000\000\000\001)\001+\001*\001%\001'\001&\000\000\000\000\000\000\000\000\000\000\003\017\003\030\000\000\003\018\000\000\003\019\000\000\000\000\003\012\000\000\000\000\000\000\000\000\003\029\000\000\000\000\003\028\001\229\001\228\000\000\000\000\001\167\001\218\001\226\000\000\000\000\000\000\000\000\002\008\000\000\000\000\000l\000m\002\007\000\000\000\000\000\000\000\217\000\000\001{\000\000\000\000\000\216\000\212\000\000\000\000\000\000\000\000\001?\000\000\003!\000\000\003\"\000\000\000\000\001\251\001\249\000\000\001\250\000\008\000\000\000\t\000\000\0022\0023\0021\000\000\0020\000\000\000\n\000\000\0025\0026\0024\000\000\0028\000\000\000\000\000\000\002*\000\000\000\000\002,\000\000\002&\000\000\002(\000\000\002-\000\000\002.\000\000\002'\002%\0029\001\177\002/\000\000\002;\000\000\002:\000\000\002<\000\000\002\182\000\011\000\000\000\000\000\000\000\000\000\000\000\000\002=\000\000\000\000\002@\000\000\002?\000\000\002>\001\001\000\000\000\000\000\000\000\000\001\002\002A\000\000\000\000\002\193\000\000\000\000\000\000\002\194\000\000\000\000\001!\000\000\000\000\000\000\000\000\000\000\002\201\000k\000\000\000\000\001\n\000\000\001\028\001\027\000\000\001^\000\000\002\192\001\163\001\161\000\000\000\000\000\000\002\195\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\191\000\000\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\013\000\000\000\000\000\000\000\000\000\000\002\196") + (16, "\000\000\000\000\002\152\000z\000\000\000\000\002\220\001I\000\000\001G\001H\001F\000\000\001K\001J\000\001\000\000\001\134\000\000\000\000\000\137\000\000\000\000\001v\000\162\000\000\000\000\000\149\000\000\000\000\000\154\000\153\000\000\000\150\000\000\000\148\000\000\000\000\000\000\000\152\000\000\000\151\003\017\003\016\000\000\000\000\000\142\000\000\000\000\000\147\000\146\000\000\000\143\000\000\000\141\000\000\000\000\000\000\000\145\000\000\000\144\000\000\000\156\000\000\000\000\000\161\000\160\000\000\000\157\000\000\000\164\000\000\001C\001B\000\000\000\165\000\000\000\163\000\136\000\000\000\155\000\000\000\170\000\000\000\000\000\000\000\159\000\000\000\000\000\000\003\007\000\000\000\000\000\000\000\000\000\000\003\012\000\000\000\000\000\167\000\000\003\014\000\000\000\000\000\000\003\137\002b\000\000\003\135\000\000\002|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\134\003\136\002h\001>\002g\001<\001=\002f\002e\002d\002`\000\000\000\000\002a\001\011\000\000\002c\000\000\003\133\000\000\000c\001;\002C\000\000\000\000\002F\000\000\000\015\000\000\000\000\000\000\000\000\001\012\002_\002k\000[\000\021\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131\002 \000R\001\021\000^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\000T\000\000\000S\001\022\000\000\002I\001\023\000\014\000\016\000\000\000\000\000\192\000\000\000\000\000\179\000\000\000\000\000\184\000\183\000\000\000\180\000\000\000\178\000\000\000\000\000\000\000\182\000\000\000\181\000\000\000\000\000\172\000\000\000\000\000\177\000\176\000\000\000\173\000\000\000\171\000\000\000\000\000\000\000\175\000\000\000\174\000\000\000\186\000\000\000\000\000\191\000\190\000\000\000\187\000\000\000\194\000\000\000\000\000\195\000\000\000\193\000\000\000\185\000\000\000\200\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\199\000\000\000\000\000\139\000\000\000\000\000\000\000\000\000\000\000\000\002\007\000\208\000\000\000\000\000n\000o\002\006\001\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\219\000\214\000\000\001\234\000\000\000\000\000\000\000\000\000\207\000\205\000\220\000\000\001~\000\000\000\000\003\t\000\000\003\008\000\000\000\000\000\000\000\000\000\000\000\197\000\000\000\000\000\000\000\000\000\198\000\196\000\000\000\000\003\011\003\015\000\188\000\000\000\000\001\026\000\000\000\000\002D\002G\000\000\002E\002H\003l\003m\003k\000\000\002i\003j\000\000\002\131\000\000\000\000\002\130\002\129\002\128\002\127\002~\002z\000\000\000\000\002{\000\000\002}\000\000\000\000\000g\002Q\000\000\000\000\002T\000\000\000\000\002W\000\000\000\000\002R\002U\000\000\002S\002V\002\133\002y\003z\003{\003y\003x\000h\000\000\000\000\000W\000\000\000V\001\031\000\000\001\243\000\000\000\000\000\000\000\000\000\000\001\016\001\249\000\000\000\000\001\158\000U\0001\001\t\000_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\000\0003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002j\000\000\000\203\000\000\000\000\001\228\000\000\001\148\001\209\000\000\000\000\001\227\000\000\001\146\001\208\000\000\000\000\000d\000\000\002\132\000\000\000\000\003}\003|\000\000\001\244\000\000\000\000\003o\003n\000\000\000Q\000\204\000\000\001x\000\000\003\n\000\000\000\000\000\000\000\000\000\168\000\166\000\000\001\020\000\000\000\000\000\169\000\158\000\000\000\000\001a\000\000\001`\000\000\001n\000\000\001\136\000\000\000\000\000\000\003?\000\000\000\000\0032\000\000\000\000\0037\0036\000\000\0033\000\000\0031\000\000\000\000\000\000\0035\000\000\0034\000\000\000\000\003+\000\000\000\000\0030\003/\000\000\003,\000\000\003*\000\000\000\000\000\000\003.\000\000\003-\000\000\0039\000\000\000\000\003>\003=\000\000\003:\000\000\003A\000\000\000\000\003B\000\000\003@\000\000\0038\000\000\003G\000\000\000\000\000\000\003<\000\000\000\000\003f\000\000\000\000\000\000\000\000\003F\003;\000\000\003h\000\000\000\000\002\234\003g\000\129\000\000\000\248\000\000\000\000\000\000\000\000\003D\000\000\000\000\000\000\000\000\003E\003C\000\000\000\000\003]\000\000\000\000\003P\000\000\000\000\003U\003T\000\000\003Q\000\000\003O\000\000\000\000\000\000\003S\000\000\003R\000\000\000\000\003I\000\000\000\000\003N\003M\000\000\003J\000\000\003H\000\000\000\000\000\000\003L\000\000\003K\000\000\003W\000\000\000\000\003\\\003[\000\000\003X\000\000\003_\000\000\000\000\003`\000\000\003^\000\000\003V\000\000\003e\000\000\000\000\000\000\003Z\000\000\000\000\000\000\000\000\003d\003Y\000\000\000\000\000\000\000\000\003b\000\000\000\000\000\000\000\000\003c\003a\003\003\003\005\003\006\003\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\210\000\209\000\000\000\000\000w\000\000\000\000\000\000\002o\000\000\000\000\000\000\002w\000\000\000\000\002v\000\000\003v\002u\002t\002s\002r\002q\001]\002m\000\000\000\000\002n\000\000\002p\000\000\000\000\000\000\000\000\000\000\000e\002J\000\000\000\000\002M\000\000\000\000\002P\000\000\000\000\002K\002N\000\000\002L\002O\002x\002l\000f\003s\003t\003r\003q\003u\000\000\000\000\000\000\000\000\001\008\001\007\000\000\000\000\000\000\000\000\000\000\001S\000\000\001\018\001P\000\000\001\006\001V\000\000\000\000\000\000\001W\000\000\000\000\001X\000\000\001\130\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\000%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Y\000\000\001U\000\000\000\000\001[\000\000\000\000\000\000\000\000\000\000\000\000\000t\000q\000r\001\\\001R\000\000\001Q\000\000\000\241\000\000\002\214\000\000\000\000\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\244\000\000\000\000\000\247\000\000\000\000\000\000\000\000\000\000\000\000\001A\000\000\000\000\000\000\000\234\000\000\000\231\000\000\000\000\000\000\000\000\000\000\000\242\000\000\000\238\000\000\000\000\000\000\000\000\000\239\000\000\000\235\000\000\000\000\000\000\002\137\000\000\000\000\000\000\000\000\002\144\000\000\000\000\002\143\002\142\002\141\002\140\002\139\002\135\000\000\000\000\002\136\000\000\002\138\000\000\000\000\000i\002X\000\000\000\000\002[\000\000\000\000\002^\000\000\000\000\002Y\002\\\000\000\002Z\002]\002\146\002\134\003\129\003\130\003\128\003\127\000j\000\000\000\000\000Z\000\000\000Y\000\000\002\145\000\000\001\210\000X\000?\001\030\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\132\003\131\000\000\002\250\000\000\002\249\000\000\000\000\000\000\000\000\003\144\000\000\000\000\000\000\003\145\000\000\000\018\000\000\000\000\000\000\003\140\000\000\001\160\000\000\000\000\000\000\000\221\002\240\001t\001s\001M\001L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\001\014\000\254\000\000\001\132\000\000\000\000\000\253\000\249\000\000\001\000\000\250\000\255\000\000\002\252\000\000\002\251\002\237\000\000\000\000\000\000\000\000\000\000\002\246\000\000\000\000\000\000\000\000\002\247\002\239\000\000\002\253\000\000\002\241\000\000\000\225\000\000\003\000\000\000\001O\000\000\000\000\003\021\000\000\003\028\000\227\000\000\000\232\000\000\003\022\000\226\000\000\003\023\000\000\003\030\000\000\000\000\000\000\000\000\000\245\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\243\000\000\000\000\000\246\000\000\000\000\000\000\000\000\001@\000\000\000\000\000\000\000\233\000\000\000\230\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\236\000\223\000\222\000\000\003\031\003 \000\000\003!\000\000\003\"\000\000\001N\002\244\000\000\000\000\001\232\000\000\001\156\001\214\000\000\002\238\000\000\000\000\000\000\002\243\000\000\000\000\000\000\0014\000\000\001.\000\000\001/\000\000\0019\001-\0018\000\000\002\255\001:\000\000\000\228\000\000\000\000\000\000\000\000\0016\0011\001\229\000\000\0012\000\000\0013\000\000\001\150\001\211\000\000\000\000\000\000\001\239\000\000\001\237\000\000\000\000\001\241\001\235\000\000\001\242\001\236\000\000\003\001\001\245\000\000\000\224\000\000\000\000\001\230\000\000\001\152\001\212\000\000\003\141\000\000\003\138\000\000\003\139\000\019\000\020\000\000\000\000\002\193\000\000\002\192\000\000\000\000\002\195\000\000\002\194\000\000\000\000\000\000\002\016\000\000\000\000\002\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\023\000\000\000\000\002\026\000\000\002\n\000\000\000\000\002\013\000\000\000\000\000\000\002\017\000\000\000\000\002\021\000\000\000\000\001\231\000\000\000\000\002\014\000\000\000\000\002\018\002\190\002\011\000\000\002\191\000\000\000\000\000\000\000\000\002\024\000\000\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022\000\000\000\000\002\025\000\000\002\t\000\000\000\000\002\012\000\000\000\000\000\000\002\015\000\000\000\000\002\019\000\000\001\154\001\213\000\000\002\196\000\000\000\000\000\000\003\142\000\017\000u\000\000\003\143\000\000\000\000\002\210\000\000\000\000\003\002\000a\000\000\000\000\000\000\000b\000\000\002\248\000\000\001z\000\000\001\128\002\245\000\000\000\000\001g\000\000\001f\000\000\001o\000\000\001\142\000\000\000\000\000\000\001e\000\000\001d\000\000\001l\000\000\001\140\000\000\000\000\000\000\001i\000\000\001h\000\000\001m\000\000\001\144\000\000\000\000\000\000\001j\000\000\000\000\000\000\001c\000\000\001b\000\000\001p\000\000\001\138\000\000\000\000\000\000\001k\000\002\000\000\000N\000O\000\000\000\000\002\164\002\168\002\172\002\160\002\157\000\000\000\000\001\177\002\169\002\176\002\161\002\175\002\159\002\174\002\163\002\155\002\162\002\171\002\158\002\165\002\156\002\167\002\173\002\170\002\166\000~\000\000\000\000\002\228\000\000\000\000\002\204\000\000\000\000\002\206\002\205\002\180\000\000\000\000\002\236\002\153\002\154\000\000\001\189\000M\001q\000\003\000\000\000\000\002\149\000\000\002\030\000\000\000\128\000\000\000\000\002\232\000\000\000\000\000\000\000y\000\000\000\000\002\218\000\000\002\003\002\002\001\172\002\182\000\000\001\205\000\000\002\150\000\000\000\000\000{\000\000\000\000\002\222\000\000\001\186\000\000\000\000\001\182\000\000\000\000\000\000\001\185\000\000\001\184\000\000\000\000\000\000\000\000\000\000\000\000\001\206\000\000\001\180\000\000\001\179\000\000\000v\000\000\000\000\002\212\000\000\000\000\001\176\000\000\000\000\000}\000\000\000\000\002\226\000\000\000\000\002\188\000\000\002\187\000\000\000\000\000\000\002\001\002\000\002\185\002$\002\178\002\186\000\000\001\192\000\000\000\000\000\000\001\188\000\000\001\194\000\000\000\000\001\183\000\000\000\000\001\190\000\000\000\000\001\191\000\000\000\000\000\000\000\000\000\000\000\000\001\207\000\000\001\181\000\000\001\251\000\127\000\000\000\000\002\230\000\000\000\000\000\000\001E\000x\001D\000\000\000\000\002\216\000\000\001\253\001\252\001\170\002\181\000\000\000|\000\000\000\000\002\224\000\000\000\000\000\000\000\000\001\255\001\254\002\183\002\"\002\177\002\184\000\000\001\199\000\000\001\203\000\000\000\000\001\195\000\000\000\000\000\000\001\187\000\000\001\193\000\000\000\000\000\000\000\000\001\175\000\000\000\000\001\202\000\000\001\201\000\000\000\000\000\000\000\000\001\198\000\000\000\000\001\197\000\000\001\196\000\000\000\000\000\000\000\000\001\200\000\000\001\204\000\000\000\000\001r\000\004\000\000\001\178\000\005\000\000\000\000\001\"\000\006\000\000\001\218\001\219\001\217\000\000\001\216\003\018\001\166\000\000\000\007\000\000\001\221\001\222\001\220\000\000\000\000\000\000\000\000\001$\000\000\000\000\000\000\000\000\001)\001+\001*\001%\001'\001&\000\000\000\000\000\000\000\000\000\000\003\024\003%\000\000\003\025\000\000\003\026\000\000\000\000\003\019\000\000\000\000\000\000\000\000\003$\000\000\000\000\003#\001\226\001\225\000\000\000\000\001\168\001\215\001\223\000\000\000\000\000\000\000\000\002\005\000\000\000\000\000l\000m\002\004\000\000\000\000\000\000\000\217\000\000\001|\000\000\000\000\000\216\000\212\000\000\000\000\000\000\000\000\001?\000\000\003(\000\000\003)\000\000\000\000\001\248\001\246\000\000\001\247\000\008\000\000\000\t\000\000\0023\0024\0022\000\000\0021\000\000\000\n\000\000\0026\0027\0025\000\000\0029\000\000\000\000\000\000\002+\000\000\000\000\002-\000\000\002'\000\000\002)\000\000\002.\000\000\002/\000\000\002(\002&\002:\001\174\0020\000\000\002<\000\000\002;\000\000\002=\000\000\002\189\000\011\000\000\000\000\000\000\000\000\000\000\000\000\002>\000\000\000\000\002A\000\000\002@\000\000\002?\001\001\000\000\000\000\000\000\000\000\001\002\002B\000\000\000\000\002\200\000\000\000\000\000\000\002\201\000\000\000\000\001!\000\000\000\000\000\000\000\000\000\000\002\208\000k\000\000\000\000\001\n\000\000\001\028\001\027\000\000\001_\000\000\002\199\001\164\001\162\000\000\000\000\000\000\002\202\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\198\000\000\000\000\000\000\000\000\000\000\000\000\002\197\000\000\000\013\000\000\000\000\000\000\000\000\000\000\002\203") let error = - (173, "\000\000\000\001\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\001\128\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\240\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\008\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 %P\208\020!\170\008\t\012\192\140\006\128\136w\130@\000\142d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\163\128\000\003\016\000\016\001\129\024\004\001\000B\000\000\000\004\200b\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\153C\000\000\002 \000 \018\0020\008\002\000\132\000\000\000\t\144\196\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\187G\000\000\006 \000 \003\0020\008\002\000\132\000\000\000\t\144\196\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000H\161\128\000\001\016\000\016\t\001\024\004\001\000B\000\000\000\004\200b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\000\016\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\001\016\000\017\t\001\024\004\001\000B\000\000\000\004\200b\245\170\240\000\128\016\000\001\004\004\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\001 \004\000\000A\001\000\000\000\000\000\128\000\000\000\000\016\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\008\001\000\000\016@@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000@\000\000\001\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\016\016\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001\000 \000\002\008\008\000\000\000\000\004\000\000\128\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\004\000\000\136\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\017\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\000\000\016@ \128\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008'\173W\128\005H\128\018\013\002\160\206\208\000\016\144\008\002\000 \128A=j\188\000*D\000\144h\021\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016OZ\175\000\n\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\008\152&\203%\128\000\n\000\129\000\0007@Bxw\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\021\"\000H4\n\131?@\000B@ \008\000\130A\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\004\004\016`\018\192\000\005\000\000\000\000\027 \0014;\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\006\200\000O\014\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\200\000O\006\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\0012\000\019\193\184\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000H\000\017\016M\132K\000\000\020\001\000\000\000L\128\004\240n\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\019 \001<\027\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000H\000\017\016M\132K\000\000\020\001\000\000\000L\128\004\240n\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\019 \001<\027\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\200\000O\006\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\0012\000\019\193\184\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000H\000\017\016M\132K\000\000\020\001\000\000\000L\128\004\240n\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000`\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\019 \001<\027\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\200\000O\006\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\0012\000\019\193\184\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\173V\128\004\000\128\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\145C\000\000\002 \000 \018\0020\008\002\000\132\000\000\000\t\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\129\000\000\001\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000L\161\128\000\001\016\000\016\t\001\024\004\001\000B\000\000\000\004\200b\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\008\000\000\008\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002e\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\145C\000\000\002 \000 \018\0020\008\002\000\132\000\000\000\t\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002e\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\001\016\000\016\t\001\024\004\001\000B\000\000\000\004\200b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\004@\000D$\004`\016\004\001\008\000\000\000\019!\139\214\171\192\002\000@\000\004\016\016\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000A\001\000\000\000\000\000\128\000\000\000\000\016\001\235U\224\001\000 \000\002\008\008\000\000\000\000\004\000\000\128\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000@\001\024\000\000\000\000\000\000\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\003\214\171\192\002\000@\000\004\000\017\128\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\004\000\000\000\000D\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\001\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000 \000\140\000\000\000\000\000\000\008\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\000\007\173W\128\004\000\128\000\008\000#\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\001\000\004`\000\000\000\000\000\000@\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007Z\173\000\008\001\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000@\000\000\001\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\016\016\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\145C\000\000\002 \000\"\018\0020\008\002\000\132\000\000\000\t\144\197\235U\224\001\000 \000\002\008\008\000\000\000\000\004\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\"\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\003\214\171\192\002\164@\t\006\129Pg\232\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000\000\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \000\000\130\001\004\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\000\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\137\002,\146P\000\000\128\008\016\000\003T\004\001\004p\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001R \004\131@\1683\244\000\004$\002\000\128\008$\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\008\128\"\192%\000\000\008\000\128\000\0004@\000\016G\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\004\000\000\016\000\000\000\000\002\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\"\000\139\000\148\000\000 \002\000\000\000\145\000\000@\028\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000$\000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\t\000\002 \008\176\t@\000\002\000 \000\000\t\016\000\004\001\192\000\000\000\005 \000H4\n\003;@\000B@ \000\000\130\001\004\000\000\002@\000\136\002,\002P\000\000\128\008\000\000\002D\000\001\000p\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\000\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\t\000\002 \008\176\t@\000\002\000 \000\000\t\016\000\004\001\192\000\000\000\005 \000H4\n\003;@\000B@ \000\000\130\001\004\000\000\002@\000\136\002,\002P\000\000\128\008\000\000\002D\000\001\000p\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\000\000 \128A\000\000\000\144\000\"\000\139\000\148\000\000 \002\000\000\000\145\000\000@\028\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000$\000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\t\000\002 \008\176\t@\000\002\000 \000\000\t\016\000\004\001\192\000\000\000\005 \000H4\n\003;@\000B@ \012\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\000\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000$\000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\t\000\002 \008\176\t@\000\002\000 \000\000\t\016\000\004\001\192\000\000\000\005 \000H4\n\003;@\000B@ \000\000\130\001\004\000\000\002@\000\136\002,\002P\000\000\128\008\000\000\002D\000\001\000p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\008\000\015Z\175\000\008\001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\002\164@\t\006\129Pgh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\n\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000 \000\000\000\000\000\000\000\002\000\000D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\001\016\000\017\t\001\024\004\001\000B\000\000\000\004\200b\245\170\240\000\128\016\000\001\004\004\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\145C\000\000\002 \000 \018\0020\008\002\000\132\000\000\000\t\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000/Z\175\000\008\001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@ \024\197q\221\225\000g\1680\000\141Q\002\130z\213x\000@\008\000\000\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\168\016\000\000\016\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005@\128\000\000\128\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\008\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\140@\000\004\128\008v\130@\000\140\000\000z\213x\000@\008\000\000\130\002\000\000\000\000\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\001\000\000\000\004\000\000\000\000\000\000\015Z\175\000\008\001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\024\196\000\000H\000\135h$\000\008\192\000\007\173W\128\004\000\128\000\008 \000\000\000\000\016\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\214\171@\002\000@\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005@\128\000\000\128\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000*\004\000\000\004\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0061\000\000\018\000!\218\t\000\0020\000\001\235U\224\001\000 \000\002\008\008\000\000\000\000\004\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\128\000\000\002\000\000\000\000\000\000\007\173W\128\004\000\128\000\008 \000\000\000\000\016\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128\161\t\016@\012b\000\000$\000C\180\018\000\004`\000\003\214\171\192\002\000@\000\004\016\016\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\008\014A\000\128b\020Gv\132\001\158\160\192\0021D\n\008\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\000\016\002\000\000 \000\128\000\128\000\000@\000\000\006\001\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000@\001\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\128\000\016\000\000\000\000\000\000\164\000\t\006\161@oh\000\008H\004\001\000\016@ \128\000\000\000\005 \000@3\n\003;@\000\194@ *\000\130\t\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\016\012\002\128\206\208\0000\144\008\000\000 \128A\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000T\136\001 \208*\012\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\016\012\002\128\206\208\0000\144\008\000\000 \128A\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\245\170\240\000\169\016\002A\160T\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000@\129\006I(\000\000@\000\008\000\001\n\002\016\0000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\169\016\002A\160T\025\250\000\002\018\001\000@\004\018\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002\001\152P\025\218\000\006\018\001\001P\004\016H \000\000\018\000\004L\019e\146\192\000\005\000@\128\000\027\160!(;\128\000\000\001\n@\000\128f\020\006v\128\001\132\128@T\001\004\018\008\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\008\024 \201%\128\000\008\000\001\000\0003@B@F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\164\000\008\006a@gh\000\024H\004\004@\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\001H\000\016\012\194\128\206\208\0000\144\008\008\128 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\002\000\0080\t@\000\002\000\000\000\000\008\016\000\128\001\128\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\002\000\000\128\002\012\002P\000\000\128\000\000\000\002\004\000 \000`\000\000\000\001H\000\016\012\002\128\206\208\0000\144\008\000\000 \128A\000\000\000\128\000 \000\131\000\148\000\000 \000\000\000\000\129\000\008\000\024\000\000\000\000R\000\004\003\000\1603\180\000\012$\002\000\000\008 \016@\000\000 \000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\020\128\001\000\192(\012\237\000\003\t\000\128\000\002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\016\012\002\128\206\208\0000\144\008\000\000 \128A\000\000\000\128\000 \000\131\000\148\000\000 \000\000\000\000\129\000\008\000\024\000\000\000\000R\000\004\003\000\1603\180\000\012$\002\000\000\008 \016@\000\000 \000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\020\128\001\000\192(\012\237\000\003\t\000\128\000\002\008\004\016\000\000\008\000\002\000\0080\t@\000\002\000\000\000\000\008\016\000\128\001\128\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\002\000\000\128\002\012\002P\000\000\128\000\000\000\002\004\000 \000`\000\000\000\001H\000\016\012\002\128\206\208\0000\144\008\000\000 \128A\000\000\000\128\000 \000\131\000\148\000\000 \000\000\000\000\129\000\008\000\024\000\000\000\000R\000\004\003\000\1603\180\000\012$\002\000\000\008 \016@\000\000 \000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\020\128\001\000\192(\012\237\000\003\t\000\128\000\002\008\004\016\000\000\008\000\002\000\0080\t@\000\002\000\000\000\000\008\016\000\128\001\128\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\002\000\000\128\002\012\002P\000\000\128\000\000\000\002\004\000 \000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\020\128\001\000\204(\012\237\000\003\t\000\128\168\002\008$\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000@3\n\003;@\000\194@ *\000\130\t\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\001H\000\016\012\194\128\206\208\0000\144\008\n\128 \130A\000\000\000\000\n@\000\128f\020\006v\128\001\132\128@D\001\004\018\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\021\000A\004\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\017\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\001\000\004`\000\000\000\000\000\000@\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\018\000\000\000\000\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\128\000\144\000\000\000\000\000\000\000\001\000\000 \000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000@\001\024\000\000\000\000\000\000\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\000\000\000\000\005 \000H5\n\003{@\000B@ \008\000\130\001\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007Z\173\000\008\001\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\000\000\000\000\005 \000H5\n\003{@\000B@ \008\000\130\001\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\128\000\016\000\000\000\000\000\000\164\000\t\006\161@oh\000\008H\004\001\000\016@ \128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\016\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\127\245\252\016\\\138\001 \212+\142\239\008\003=A\128$z\1404\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008'\173W\128\005H\128\018\013\002\160\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\020\128\001\000\192(\012\237\000\003\t\000\128\000\002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\016\012\002\128\206\208\0000\144\008\000\000 \128A\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000D\1936Y,\000\000P\004\008\000\001\170\002\002\131\184\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\169\016\002A\160T\025\250\000\002\018\001\000@\004\018\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\004D\019a\018\192\000\005\000@\000\000\026 \000(;\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\002\"\t\176\137`\000\002\128 \000\000\t\016\000\020\013\192\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\002@\000\136\130l\"X\000\000\160\008\000\000\002D\000\005\003p\000\000\000\001H\000\016\012\002\128\206\208\0000\144\008\000\000 \128A\000\000\000\144\000\" \155\008\150\000\000(\002\000\000\000\145\000\001@\220\000\000\000\000R\000\004\003\000\1603\180\000\012$\002\000\000\008 \016@\000\000$\000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\020\128\001\000\192(\012\237\000\003\t\000\128\000\002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\016\012\002\128\206\208\0000\144\008\000\000 \128A\000\000\000\144\000\" \155\008\150\000\000(\002\000\000\000\145\000\001@\220\000\000\000\000R\000\004\003\000\1603\180\000\012$\002\000\000\008 \016@\000\000$\000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\020\128\001\000\192(\012\237\000\003\t\000\128\000\002\008\004\016\000\000\t\000\002\"\t\176\137`\000\002\128 \000\000\t\016\000\020\013\192\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\002@\000\136\130l\"X\000\000\160\008\000\000\002D\000\005\003p\000\000\000\001H\000\016\012\002\128\206\208\0000\144\008\000\000 \128A\000\000\000\144\000\" \155\008\150\000\000(\002\000\000\000\145\000\001@\220\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\192\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\020\128\001\000\192(\012\237\000\003\t\000\128\000\002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\002@\000\136\130l\"X\000\000\160\008\000\000\002D\000\005\003p\000\000\000\001H\000\016\012\002\128\206\208\0000\144\008\000\000 \128A\000\000\000\144\000\" \155\008\150\000\000(\002\000\000\000\145\000\001@\220\000\000\000\000R\000\004\003\000\1603\180\000\012$\002\000\000\008 \016@\000\000$\000\008\136&\194%\128\000\n\000\128\000\000$@\000P7z\213x\000T\136\001 \208*\012\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\004\018\013\002\128\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\030\\\138\001\000\198+\142\239\008\003=A\128\004j\136\020\016\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\008\000\000\000\000\000\000\016D\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\020\002\001\136W\029\222\016\006z\131\000\008\213\016('\255_\193\005\200\160\018\013B\248\238\240\1283\212\024\002F\168\161A?\250\254\015.E\000\128c\021\199w\132\001\158\160\192\0025D\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\255\195\203\145@ \024\197\241\221\227\000g\1690\000\143Q\198\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\130\228P\008\0061\\wx@\025\234\012\000#T@\160\159\253\127\004\023\"\128H5\011\227\187\194\000\207P`\t\026\162\133\004\255\235\248 \185\020\002A\168W\029\222\016\006z\131\000H\213\016h \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\008\014A\000\128b\020Gv\132\001\158\160\192\0021D\n\008\000\000\000@r\008\004\003\016\162;\180 \012\245\006\000\017\138 P@\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\130A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@ \144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\128\228\016\008\006!Dwh@\025\234\012\000#\020@\160\128\000\000\004\007 \128@1\n#\187B\000\207P`\001\024\162\005\004\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000@\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\n\145\000$\026\005A\159\160\000! \016\004\000A \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\128\228\016\008\006!Dwh@\025\234\012\000#\020@\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016\\\138\001 \212+\142\239\008\003=A\128$j\136\020\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\255\135\151\"\128@1\139\227\187\198\000\207R`\001\030\163\141f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\215\240Ar(\004\003\024\174;\188`\012\245\006\000\017\170 P@\000\000\000\000\000\000\004\002\000\000\000\002\000\000\000\000\004\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\130\228P\008\0061\\wx\192\025\234\012\000#T@\172\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\004L\019e\146\192\004\005\000@\144\000\027\160 (;\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\128@\000\000\000@\000\000\000\000\128\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\130\228P\t\006\161\\wx\192\025\234\012\001#T@\172\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\020\002\001\140W\029\2220\006z\131\000\008\213\016+0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001R \004\131@\1683\244\000\004$\002\000\128\008$\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\016\000\001\024\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000@\008\000\000\128\0020\000\000\000\000\000\000 \000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\018\013B\128\222\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000@\008\000\000\128\0020\000\000\000\000\000\000 \000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\001\000\000\000\000\000\000\n@\000\144j\020\006\246\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\181Z\000\016\002\000\000\000\000\128\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\001\000\000\000\000\000\000\n@\000\144j\020\006\246\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\018\013B\184\238\241\1283\212\024\002F\168\129Y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\004\002\000\000\000\002\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\130\228P\t\006\161\\wx\192\025\234\012\001#T@\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\128\000\008\192 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\008\000\000\000\000\002\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\016\000\000\000\000\000\000\000\000\000\008\000\015\254\255\194\011\145\192&\026\133\241\221\227\000\231\1690\012\143Q\214\179\000\000\000\016\028\130\001\000\196(\142\237\008\003=A\128\004b\136\020\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"\128@1\139\227\187\194\000\207P`\001\030\163\141\004\000\000\000\000\000\000\000@ \000\000\000\000\000\000\000\000@\000\000\000\007\255_\193\005\200\160\016\012b\248\238\240\1283\212\024\000G\168\227A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\128@\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016\\\138\001 \212/\142\239\008\003=A\128$z\1424\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"\128H5\011\227\187\194\000\207P`\t\030\163\141\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\004\000\007\255_\193\005\200\160\016\012b\248\238\240\1283\212\024\000F\168\161A\000\000\000\000\000\000\000\016\008\002\000\000\000\000\000\000\000\016\000\001\000\001\255\215\240Ar(\004\003\024\190;\188 \012\245\006\000\017\170(P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\008\004\001\000\000\000\000\000\000\000\008\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\018\013B\248\238\240\1283\212\024\002F\168\161A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\002\000 #\000\000\000\008\000\000\000\000\016\000\000\000\000\000\000\001\000\012\004\000\000\000\000\001\000\000\000\008\000\000 \002\255\235\248 \185\020\002\001\140W\029\222\016\006z\131\000\008\213\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \024\008\000\000\000\000\002\000\000\000\016\000\000@\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145\192&\026\133q\221\225\000\231\1680\004\141Q\018\131\127\245\252\016\\\138\001\000\198+\142\239\008\003=A\128\004j\136\020\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\028\002a\168W\029\222\016\014z\131\000H\213\017(0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\004\000\007\255_\193\005\200\160\018\013B\248\238\240\1283\212\024\002F\168\161A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128@ \000\000\000 \000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.E\000\144j\021\199w\140\001\158\160\192\0185D\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\223\175\224\002\164P\008\006\001Pgx\000\024H\004\000\000T@\160\128\000\000\000\005 \016H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\239\215\240\001R(\004\003\000\1683\188\000\012$\002\000\000* P@\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\001\000\004\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\001\024\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\008\001\000\000\016\000F\000\000\000\000\000\000\004\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\168P\027\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001 \212(\013\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\170\208\000\128\016\000\000\000\004\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\128\000\247\235\248\000\169\020\002\001\128T\025\222\000\006\018\001\000\000\021\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000 `\131$\150\000 \000\004\128\000\197\001\001\001\024\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001 \212(\013\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000T\136\001 \208*\012\253\000\001\t\000\128 \002\t\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\004\000\000F\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000 \000\140\000\000\000\000\000\000\008\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131P\1607\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\168P\027\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\235U\160\001\000 \000\000\000\008\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H5\n\003{@\000B@ \008\000\130\001\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\001\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\128\008\008\192\000\000\002\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\004\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\004\016\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.E\000\128c\021\199w\132\001\158\160\192\0025D\n\008\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\255\235\248 \185\020\002A\168W\029\222\016\006z\131\000H\245\024h \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\002\000@\000\004\000\016\000\016\000\000\008\000\000\000\192!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\191\250\254\008.E\000\128c\021\199w\132\001\158\160\192\0025D\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\000\001\004\002\008\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\000\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\004\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\008\000\000\000\128\228\016\008\006!Dwh@\025\234\012\000#\020@\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 9\004\002\001\136Q\029\218\016\006z\131\000\008\197\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\000\000\016@ \128\000\000\000\000\001\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\000 \004\000\000@\001\000\001\000\000\000\128\000\000\004\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000/\254\191\128\008\001\000\000\016\000@\000@\000\000 \000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\002\000@\000\004\000\016\000\016\000\000\008\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\004\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\132\014\016\145$\008@ \000\002@\004)A \000F\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\008\000\128\161\t\016@\000@\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000 \000\000\000\128\008\n\016\145\004\000\004\000\000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\002\000\000@\000\000\000\000\000\000\129\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\004@\000\000\000\000\000\000\129\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000\225\t\016@\132\002\000\000$\000B\144\018\000\004`\000\003\214\171\192\007\008@\002\004 \016\000\001 \002\020\128\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\0180\128\000\128\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \000 \000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\002\000\000\000\008\000\128\161\t\016@\000@\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000 \000\000\000\000\000\000\004\000\000\000\000\000\000\000\016\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\128\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000\225\t\000@\132\002\000\000$\000B\144\018\000\004 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\0008B\000\016!\000\128\000\t\000\016\164\004\128\001\008\000\000\000\016\001\001B\018 \128\000\128\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\008\000\000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\000\016\000\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \000 \000\000\018\000!\218\t\000\0020\000\000\000 \002\002\132$A\000\001\000\000\002\144\001\014\208H\000\017\192\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\000\128\000\000H\000\135h$\000\008\192\000\000\000\128\008\n\016\145\004\000\132\000\000\n@\004;A \000G\000\000\000\004\000@P\132\136 \000 \000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001\000 \000\002\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016 \003\214\171\192\002\000@\000\004\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\128\008\n\016\145\004\000\134\000\000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\000\000\000\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\128\000\000\002\000 (BD\016\000\016\000\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\008\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\024\000\000\016 \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\000\016\000\000\t\000\016\237\004\128\001\024\000\000\000\016\001\001B\018 \128\002\128\000\001H\000\135h$\000\008\224\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128\161\t\016@\000@\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\000\128\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000\003\000\000\001 \002\029\160\144\000#\000\000\000\002\000 (BD\016\002P\000\000)\000\016\237\004\128\001\028\000\000\000\016\001\001B\018 \128\000\128\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\000@P\132\136 \000 \000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\000\024\000\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\008\000\000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\128\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\008\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\016\000\000\000@\004\005\008H\130\000\002\000\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\001\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\000\016\000\000\t\000\016\237\004\128\001\024\000\000\000\016\001\001B\018 \128\002\128\000\001H\000\135h$\000\008\224\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\221x\128\225\t\016@\132B\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\016\001\001B\018 \128\002\192\000\001H\000\135h$\000\008\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \000 \000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\245\186\241\001\194\018 \129\008\196\000\000H\000\135h$\000\008\192\000\000\000\128\008\n\016\145\004\000\004\000\000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\132\000\000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\008\028!\"H\016\128@\000\004\128\008R\130@\000\140\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\014\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\223\248Ar(\004\131\208\238;\188 \012\245&\000\145\170 V`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\127\225\005\200\160\018\015B\184\238\240\1283\212\152\002F\168\129Y\189\251\255\000 \004\000\000@\001\000\000\000\000\000\004\000\000\000\000\000\001\239\223\248\001\000 \000\002\000\008\000\000\000\000\000 \000\000\000\000\000\015~\255\192\008\001\000\000\016\000@\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000H\161\128\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002E\012\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\018(`\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248<\185\020\002\001\140W\029\222\016\006z\131\000\008\213\016('\255_\193\005\200\160\016\012b\184\238\240\1283\212\024\000F\168\129A\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\215\240Ar(\004\003\024\174;\188 \012\245\006\000\017\170 V`\000\000\000\000\000\000\004\002\000\000\000\000\000\000\000\000\004\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\008\004\000\000\000\000\000\000\000\000\008\000\000\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\018\013B\184\238\240\1283\212\024\002F\168\129Y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\0030\1603\180\000\012$\002\002\160\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\242\228P\008\0061\\wx@\025\234\012\000#T@\160\159\253\127\004\023\"\128@1\138\227\187\194\000\207P`\001\026\162\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\007\255_\193\005\200\160\016\012b\184\238\240\1283\212\024\000F\168\129Y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\215\240yr(\004\003\024\174;\188 \012\245\006\000\017\170 PO\254\191\130\011\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\247\239\252\000\128\016\000\001\000\004\000\000\000\000\002\016\000\000\000\000\000\000\018(`\000\000\000\000\004\000\000F\000\000\000\016\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\001\000\004`\000\000\000\000\000\000@\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\128\001\235U\224\001\000 \000\002\000\008\192\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\016\000\000\000@\000\000\000\004@\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\003\214\171\192\002\000@\000\004\000\017\128\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\001\255\215\240Ar(\004\131P\174;\188 \012\245\006\000\145\170 \208@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\000\128\000\000\000\000\000\000\000\001\000\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\020\002A\168W\029\222\016\006z\131\000H\213\016+0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\145C\000\000\000 \000 \000\0020\000\000\000\132\000\000\000\000\000\196\000\000\000\000\000\128\128 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\018\013\003\128\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\127\225\005\200\160\018\015C\184\238\240\1283\212\152\002F\168\129Y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\255\132\023\"\128H=\n\227\187\194\000\207R`\t\026\162\005f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\127\225\005\200\160\016\012b\184\238\240\1283\212\152\000F\168\129Y\128\000\000\000\000\000\000\016\008\000\000\000\000\000\000\000\000\016\000\000\000\197\255\223\248Ar(\004\003\024\174;\188 \012\245&\000\017\170 V`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016\\\138\001 \212+\142\239\008\003=I\128$j\136\021\155\255\191\240\130\228P\008\0061\\wx@\025\234L\000#T@\172\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128@ \000\000\000\000\000\000\000\000@\000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\251\255\008.E\000\144j\021\199w\132\001\158\164\192\0185D\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\255\194\011\145@$\026\133q\221\225\000g\1690\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\191\240\130\228P\t\006\161\\wx@\025\234L\001#T@\172\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002E\012\000\000\000\128\000\128\000\008\192\000\000\002\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\191\240\130\228P\t\006\161\\wx@\025\234L\001#T@\172\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128@ \000\000\000\000\000\000\000\000@\000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\251\255\008.E\000\144j\021\199w\132\001\158\164\192\0185D\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$P\192\000\000\008\000\008\000\000\140\000\000\000!\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\000\000\000\000\000\000\000\000 H\158\000`\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000@\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\008\016\000\000\000\000\000\000\000\128\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\002\004\000\000\000\000\000\000\000 \000\000\000 \000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\008\001\000\000\000\000\000\002\000\000\016 \000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\0040\002\000\002\001@\000\000\000\000\000\128\000\004\008\000\000\000\000\000\000\000@\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000C\000 \000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\008\224\006\000\000\002\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\016\192\012\000\000\004\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\134\000@\000\000 \000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\128\016\001\000\008\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\024\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0040\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\017\192\012\000\000\004\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\134\000`\000\000 \000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\0040\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\128\016\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\012\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\016\192\012\000\000\004\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\134\000@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0040\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\128\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000") + (176, "\000\000\000\001\128\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000\000\000\000\000\000\002\000C\000\000\002\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\001*\134\128P!\170\008\t\012\192\140\006\128\136w\130@\000\142d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001v\142\000\000\001\136\000\008\000\192\140\002\000\128!\000\000\000\002d1\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001v\142\000\000\001\136\000\008\000\192\140\002\000\128!\000\000\000\002d1\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\132\128\140\002\000\128!\000\000\000\002d1z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\002 \001\000\000\016@@\000\000\000\000 \000\000\000\000\004\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016@@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\008\000\000\000 \000\000\000\000\000\000z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\016\000\002 \000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\008\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130z\213x\000\"\145\000$\026\005A\157\160\000! \016\004\000A\000\130z\213x\000\"\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130z\213x\000\"\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\008\152&\203%\128\000\n\000\129\000\0007@Bxw\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000\"\145\000$\026\005A\159\160\000! \016\004\000A \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\008\008 \192%\128\000\n\000\000\000\0006@\002hw\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\0006@\002xw\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000&@\002x7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000&@\002x7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000&@\002x7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000&@\002x7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000&@\002x7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000&@\002x7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000&@\002x7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000&@\002x7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000&@\002x7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\006\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000&@\002x7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000&@\002x7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000&@\002x7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\213h\000 \001\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\008\000\000\001\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\008\000\000\001\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\132\128\140\002\000\128!\000\000\000\002d1z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016@@\000\000\000\000 \000\000\000\000\004\000z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\008\000\000\000 \000\000\000\002 \000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000 \000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\213h\000 \001\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\008\000\000\000 \000\000\000\000\000\000z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\132\128\140\002\000\128!\000\000\000\002d1z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000z\213x\000\"\145\000$\026\005A\159\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\008\144\"\201%\000\000\008\000\129\000\0005@@\016G\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000\"\145\000$\026\005A\159\160\000! \016\004\000A \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\0004@\000\016G\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\004\000\000\016\000\000\000\000\002\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\006\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\001 \000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000z\213x\000 \001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000\"\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000\"\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\016\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\136\000\008\132\128\140\002\000\128!\000\000\000\002d1z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\"\134\000\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001z\213x\000 \001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130z\213x\000 \001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\008\000\000\001\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\008\000\000\001\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\140@\000\004\128\008v\130@\000\140\000\000z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\008\000\000\000 \000\000\000\000\000\000z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\140@\000\004\128\008v\130@\000\140\000\000z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\213h\000 \001\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\008\000\000\001\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\008\000\000\001\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\140@\000\004\128\008v\130@\000\140\000\000z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\008\000\000\000 \000\000\000\000\000\000z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\140@\000\004\128\008v\130@\000\140\000\000z\213x\000 \001\000\000\016@@\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\008\000\128P!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\016\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\000 \001\000\000\016\000@\000@\000\000 \000\000\003\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\002\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\021\000A\004\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000\"\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130z\213x\000\"\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\008\016 \201%\000\000\008\000\001\000\000!@B\000\006\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000\"\145\000$\026\005A\159\160\000! \016\004\000A \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\008\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\021\000A\004\130\000\000\001 \000\008\152&\203%\128\000\n\000\129\000\0007@BPw\000\000\000\002\002\144\000 \025\133\001\157\160\000a \016\021\000A\004\130\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\008\024 \201%\128\000\008\000\001\000\0003@B@F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\017\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\017\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000\008\000 \192%\000\000\008\000\000\000\000 @\002\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\021\000A\004\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\021\000A\004\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\021\000A\004\130\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\017\000A\004\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\021\000A\004\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\140\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\t\000\000\000\000\000\000\000\000\016\000\002\000\000\000\000\000\000\000\000\008\000\t\000\000\000\000\000\000\000\000\016\000\002\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\002\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\213h\000 \001\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\002\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\002\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\127\245\252\016#\145@$\026\133q\221\225\000g\1680\004\143Q\134\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130z\213x\000\"\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\008\152&\203%\128\000\n\000\129\000\0005@@Pw\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000\"\145\000$\026\005A\159\160\000! \016\004\000A \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\0004@\000Pw\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\006\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000$@\000P7\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000\008\136&\194%\128\000\n\000\128\000\000$@\000P7z\213x\000\"\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\008$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\030#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000 \000\000\000\000\000\000A\016\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@ \024\133q\221\225\000g\1680\000\141Q\002\130\127\245\252\016#\145@$\026\133\241\221\225\000g\1680\004\141QB\130\127\245\252\030#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\030#\145@ \024\197\241\221\227\000g\1690\000\143Q\198\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\127\245\252\016#\145@$\026\133\241\221\225\000g\1680\004\141QB\130\127\245\252\016#\145@$\026\133q\221\225\000g\1680\004\141Q\006\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\016\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\016\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\008$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\008$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\016\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\016\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\004\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000\"\145\000$\026\005A\159\160\000! \016\004\000A \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\016\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@$\026\133q\221\225\000g\1680\004\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\030#\145@ \024\197\241\221\227\000g\1690\000\143Q\198\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@ \024\197q\221\227\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\004\002\000\000\000\002\000\000\000\000\004\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@ \024\197q\221\227\000g\1680\000\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\008\152&\203%\128\008\n\000\129 \0007@@Pw\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\004\002\000\000\000\002\000\000\000\000\004\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@$\026\133q\221\227\000g\1680\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@ \024\197q\221\227\000g\1680\000\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000\"\145\000$\026\005A\159\160\000! \016\004\000A \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\008\000\000\140\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\002\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\213h\000 \001\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\002\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@$\026\133q\221\227\000g\1680\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\004\002\000\000\000\002\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@$\026\133q\221\227\000g\1680\004\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\008\000\000\140\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\016\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\127\247\254\016#\145\192&\026\133\241\221\227\000\231\1690\012\143Q\214\179\000\000\000\016\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@ \024\197\241\221\225\000g\1680\000\143Q\198\130\000\000\000\000\000\000\000\004\002\000\000\000\000\000\000\000\000\004\000\000\000\000\127\245\252\016#\145@ \024\197\241\221\225\000g\1680\000\143Q\198\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\004\002\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@$\026\133\241\221\225\000g\1680\004\143Q\198\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@$\026\133\241\221\225\000g\1680\004\143Q\198\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\127\245\252\016#\145@ \024\197\241\221\225\000g\1680\000\141QB\130\000\000\000\000\000\000\000\004\002\000\128\000\000\000\000\000\000\004\000\000@\000\127\245\252\016#\145@ \024\197\241\221\225\000g\1680\000\141QB\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\004\002\000\128\000\000\000\000\000\000\004\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@$\026\133\241\221\225\000g\1680\004\141QB\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\008\000\128\140\000\000\000 \000\000\000\000@\000\000\000\000\000\000\000\128\006\002\000\000\000\000\000\128\000\000\004\000\000\016\001\127\245\252\016#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\006\002\000\000\000\000\000\128\000\000\004\000\000\016\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145\192&\026\133q\221\225\000\231\1680\004\141Q\018\131\127\245\252\016#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145\192&\026\133q\221\225\000\231\1680\004\141Q\018\131\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\127\245\252\016#\145@$\026\133\241\221\225\000g\1680\004\141QB\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\004\002\000\000\000\002\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@$\026\133q\221\227\000g\1680\004\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\245\252\000\"\145@ \024\005A\157\224\000a \016\000\001Q\002\130\000\000\000\000\002\144\008$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\245\252\000\"\145@ \024\005A\157\224\000a \016\000\001Q\002\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\140\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\213h\000 \001\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000{\245\252\000\"\145@ \024\005A\157\224\000a \016\000\001Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\008\024 \201%\128\008\008\000\001 \0001@@@F\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000\"\145\000$\026\005A\159\160\000! \016\004\000A \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\008\000\000\140\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\213h\000 \001\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\008\000\008\000\128\140\000\000\000 \000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000A\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\127\245\252\016#\145@$\026\133q\221\225\000g\1680\004\143Q\134\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\000 \001\000\000\016\000@\000@\000\000 \000\000\003\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\127\245\252\016#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\016\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\000 \001\000\000\016\000@\000@\000\000 \000\000\001\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\127\245\252\000 \001\000\000\016\000@\000@\000\000 \000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\000 \001\000\000\016\000@\000@\000\000 \000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x@p!\"H\016\128@\000\004\128\008R\130@\000\140\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\002\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\016\000\002\000\000\000\000\000\000\000\129\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\"\000\000\000\000\000\000\000\129\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000p!\"\008\016\128@\000\004\128\008R\002@\000\140\000\000z\213x\000p!\000\008\016\128@\000\004\128\008R\002@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!#\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\002\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\016\000\000\000\000\000\000\002\000\000\000\000\000\000\000\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000p! \008\016\128@\000\004\128\008R\002@\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000p!\000\008\016\128@\000\004\128\008R\002@\000\132\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\002\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\008\000\128P!\"\008\000\008\000\000\020\128\008v\130@\000\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\008\000\128P!\"\008\001\008\000\000\020\128\008v\130@\000\142\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000z\213x\000 \001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\008\000\128P!\"\008\001\012\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\002\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000 \000\000\016\000\000\000\000\000\000\002\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\008\000\128\\!\"\008\000(\000\000\020\128\008v\130@\000\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\012\000\000\004\128\008v\130@\000\140\000\000\000\008\000\128P!\"\008\001(\000\000\020\128\008v\130@\000\142\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\012\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\002\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\016\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\002\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000 \000\000\016\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\008\000\128\\!\"\008\000(\000\000\020\128\008v\130@\000\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\221x\128p!\"\008\016\136@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\128\\!\"\008\000,\000\000\020\128\008v\130@\000\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000z\221x\128p!\"\008\016\140@\000\004\128\008v\130@\000\140\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128P!\"\008\001\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\008\000\128P!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x@p!\"H\016\128@\000\004\128\008R\130@\000\140\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\007\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016#\145@$\030\135q\221\225\000g\1690\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016#\145@$\030\133q\221\225\000g\1690\004\141Q\002\179{\247\254\000 \001\000\000\016\000@\000\000\000\000\001\000\000\000\000\000\000{\247\254\000 \001\000\000\016\000@\000\000\000\000\001\000\000\000\000\000\000{\247\254\000 \001\000\000\016\000@\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\"\134\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\"\134\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\"\134\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\030#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\127\245\252\016#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@ \024\197q\221\225\000g\1680\000\141Q\002\179\000\000\000\000\000\000\000\004\002\000\000\000\000\000\000\000\000\004\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\004\002\000\000\000\000\000\000\000\000\004\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@$\026\133q\221\225\000g\1680\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\021\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\030#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\127\245\252\016#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\127\245\252\016#\145@ \024\197q\221\225\000g\1680\000\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\030#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\127\245\252\016#\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\247\254\000 \001\000\000\016\000@\000\000\000\000!\000\000\000\000\000\000\001\"\134\000\000\000\000\000\008\000\000\140\000\000\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\140\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\008\000\000\000 \000\000\000\002 \000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000z\213x\000 \001\000\000\016\000F\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@$\026\133q\221\225\000g\1680\004\141Q\006\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\004\002\000\000\000\000\000\000\000\000\004\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016#\145@$\026\133q\221\225\000g\1680\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\008\000\008\000\000\140\000\000\000!\000\000\000\000\0001\000\000\000\000\000\004\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\007\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016#\145@$\030\135q\221\225\000g\1690\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016#\145@$\030\133q\221\225\000g\1690\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016#\145@ \024\197q\221\225\000g\1690\000\141Q\002\179\000\000\000\000\000\000\000\004\002\000\000\000\000\000\000\000\000\004\000\000\0001\127\247\254\016#\145@ \024\197q\221\225\000g\1690\000\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016#\145@$\026\133q\221\225\000g\1690\004\141Q\002\179\127\247\254\016#\145@ \024\197q\221\225\000g\1690\000\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\004\002\000\000\000\000\000\000\000\000\004\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016#\145@$\026\133q\221\225\000g\1690\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016#\145@$\026\133q\221\225\000g\1690\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016#\145@$\026\133q\221\225\000g\1690\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\008\000\008\000\000\140\000\000\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016#\145@$\026\133q\221\225\000g\1690\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\004\002\000\000\000\000\000\000\000\000\004\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016#\145@$\026\133q\221\225\000g\1690\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\008\000\008\000\000\140\000\000\000!\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\002\000\000\000\000\000\000\000\000\016$O\0000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\008\016\000\000\000\000\000\000\000\128\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\008\016\000\000\000\000\000\000\000\128\000\000\000\128\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000 \004\000\000\000\000\000\001\000\000\008\016\000\000\000\000\000\000\000\128\000\000\000\128\000\000\000\000\128\000\000\000\128\000\000\000\000\000\000\000C\000 \000 \020\000\000\000\000\000\001\000\000\008\016\000\000\000\000\000\000\000\128\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\128\000\000\000\000\000\000\000C\000 \000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000G\0000\000\000\016\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000C\0000\000\000\016\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000C\000 \000\000\016\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\000 \002\000\016\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\000 \000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000G\0000\000\000\016\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000C\0000\000\000\016\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000C\000 \000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\000 \000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000C\0000\000\000\016\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000C\000 \000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\000 \000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000") let action = - ((16, "\000\224\001Z\000\000\000\000\000\000\001\031\000\000\000\000\000\000\000\224\000\000\001T\023\164\000\000\018B\018F\000\000\000\000+\022\018B\000\000<\142\018B\000\000\000\000\018B\000\000\018B\000\000\001\003\000\195\018B\000\000\018B\000\000\000\000\000\000+\224\018B\000\000<\194\018B\000\000\000\000\018B\000\000\018B\000\000\000W\000\017\018B\000\000\018B\000\000\018B\000\000<\198\018B\000\000\000\000\018B\000\000\018B\000\000\000O\000\000\000\000\000\000\018B\000\000\018B\000\000\000\000\018B\000\000\018B\000\000\000\224\001\134\018B\000\000\023\164\018B.,\000\000Hb\002T.,\000O.,\000\000\001\174\018B\000\000I\024\000\000\000O\001\234.\176\000\000\000\0009j\000\000=\210\000\000>H.\176.\176\019\158\019\158=\210\019\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009\224.\176\000\000\000\0009\224\000\0009\224\000\000.\176\000\000\000\000\000\000\022\250\000O\000\000\019\158\000\000+\176.\176\027\180.\176\000\000\000\000\000\000\000\000\000\000\000\000\030\246.\176\031d.\176 \\.\176 \202.\176\000\000.\176\000\000.\176!\194.\176\"0.\176#(.\176#\150.\176$\142.\176\001\230.\176\000\000\000\000\000\000\000\000\000\000.\176$\252.\176%\244.\176&b.\176\000\000\000\000.\176\000\000\000\000\002&\000\000\000\000\000\000\000\000\019\236\018B\000\000\003^\018B\000\000?\002\018B\000\000\000\000\018B\000\000\018B\000\000\002d\002\144\018B\000\000\018B\000\000\004\246\018B\000\000?$\018B\000\000\000\000\018B\000\000\018B\000\000\002\130\002\234\018B\000\000\018B\000\000\018B\000\000?>\018B\000\000\000\000\018B\000\000\018B\000\000\000O\018B\000\000\018B\000\000\018B\000\000\018B\000\000\003\030\003\136\018B\000\000<\142.,\003T\018B\000\000J\146IB\000\000\000\152\004\022\000O\003\194\004\128I\208\000\000\000\000\000\235K8\000\000\000\000\000\000\000\000\001*\004\142\001\012\004\164I\208\000+I\208\000\000\000\000\003\250\000\000\004N\005lI\208\004\224\000\000\000\000\000\000\000\235\000\000\004\246\005\254\000\000\006<\000\000\019\236\001*.,\005\160\018B\000\000<\194.,\005\162\018B\000\000\000\000\000O\006\136\000\000\000\000\000\000\000\015\019\158\000\000.\176\005\178\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\005\184\000\000\000\000\005\188\000\000\005\204=\210\000\000\000\000\000\000\000\000\000\000\000\000@&.\176\000\000@&\000\000@&=\210\000\000\000\000/R\000O\000\000\019\158\005\210\000\000.\176\005\212\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000I\204.\176\000\000.\176\000\000\000\000\005\216\000\000\000\188:\148\006\140.\176\006V\000\000\000\000=\210\000\188\000\000\000\000\000\000\000\000\000\000K\148=\210K\202=\210L =\210L\202=\210\000\000=\210\000\000=\210M =\210MV=\210M\202=\210NL=\210N\130.\176\006\n=\210\000\000=\210N\216=\210O\130=\210O\216\005\230\000\000\005\236\000\000\001&.\176\000\000\001&\000\000\000\000\002\174\023\164\000\000\002\174\000\000\000\000\005\240.\176\000\000\005\244\000\000\019\158\005\246\000\000\000\000\006\196\000\000\019\158\006\000\000\000\000\000\006\022\000\000\000\000\001\234\000\000\006\250\000\000<\198.,\006 \018B\000\000\000\000\006\166\000\000\0064\018B\000\000\000\000\001\132\023\164\000\000\023\164\000\000\006\"\000\000\001\132\000\000\016\030\026\006\0182\000\000\005\218\0182\000\000\0186\0182\000\000\000\000\0182\000\000\0182\000\000\006h\006\148\0182\000\000\0182\000\000\006\022\0182\000\000\018F\0182\000\000\000\000\0182\000\000\0182\000\000\006l\006\152\0182\000\000\0182\000\000\0182\000\000/\192\0182\000\000\000\000\0182\000\000\0182\000\000\000O\0182\000\000\0182\000\000\0182\000\000\0182\000\000\006p\006\158\0182\000\000\023\164\006R\000\000\0182.,\006L\0182\000\000\000\000\000[\000\000\002\030\000[\000\000\000\000\000\000\0076\000\000\001\188.,\006^\0182\000\000\018F.,\006b\0182\000\000\000\000\021\002\0182\000\000\006R\0182\000\000/\242\0182\000\000\000\000\0182\000\000\0182\000\000\006\146\006\190\0182\000\000\0182\000\000\0072\0182\000\0000l\0182\000\000\000\000\0182\000\000\0182\000\000\006\152\006\196\0182\000\000\0182\000\000\0182\000\0000r\0182\000\000\000\000\0182\000\000\0182\000\000\000O\0182\000\000\0182\000\000\0182\000\000\0182\000\000\006\160\006\204\0182\000\000/\242.,\006x\0182\000\000\000\000\002\160.,\006|\0182\000\0000l.,\006~\0182\000\000\000\000\000\000\000\000\000\000\000\000\007B.\176\006\142\021f\007P.\176\006\150\007L.,\000\000\000\000.,\000O\000\000\002\004.\176'\242\000\000Ab.\176\006\164\000\000\019\158\006\166\000\000\006\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\216.\176\000\000A\216\000\000A\216BN\019\158\006\172BN\000\000\000\000\029\022\000O\000\000\019\158\006\174\000\000.\176\006\178\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000.\176\000\134.\176\006\180\000\000\000\000(\166\025\\'>\007j.\176\000\000\0078\000\000\000\000\000O\000\000\000\000\024R\006\248'\242\000\000\007\016'\242\000\000\000\028\000\000\000\000;jBN?\182BNP\014BNP:BN\000\000BN\000\000BNP\140BNP\228BNQ@BNQPBNQ\168BNQ\184BNQ\218BNR\\\000\000\006\246\000\000\007\006)Z\000\000*\014\007\008*\014,\170\007\n*\014\000\000\000\000\000\000\000\000\000\000\007\002\000\000\007\230\000\000\000O\000\000\002\004\007\232\000\000\000N\007\184\000O\007\016\007\222I\208\007$\001(\000\000.\176\008\002\000\000\003\226\005\020\007\234I\208\0070\008\014\000\000\002\008.\176\008\016\000\000\008\018\000\000\019\236\000O\002\172.\176\008\020\000\000\008\022\000\000\000O\002\188.\176\008\024\000\000\008\028\000\000\000\213\007j\006\182\000\000B\196C:\019\158\007H\000\000\007JC:\000\000\000\000\000\000\000\000\000\000\000\000C\176.\176\000\000C\176\000\000C\176C:\000\000\000\000\026\\\000O\000\000\019\158\007L\000\000.\176\007J\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000-\130.\176\000\000.\176\000\000\007V\000\000\001&\000\000\000\000\000\000\000\000\000\0001@C:1\156C:28C:2\148C:\000\000C:\000\000C:30C:3\140C:4(C:4\132C:5 .\176\007\132C:\000\000C:5|C:6\024C:6t\019\158\007^\000\000\000\000.\176\000\000\008<\000\000\001V\008\018.\176\007\222\000\000\008\026.\176\007\234\000\000\000\003\000\000\006\182\006\182\001V\000\000\001V\000\000\016\030\006\182\006\182\000\000\000\000\000\000\000\000\000\000\000\000\0080.\176\007v\021f\0224\000O\008Z\000\000\008B7:\008l7:\008n.\176\007\148\021f\021f\000\248\001N\002\208\000\000\000\000\000\000\001N\000\000\001\170\000\248\000\000\000\000\007\150\000\000\000\000\000\000\008v\000\000\008x\000\000\000\000\008\166\008\\.\176\007\162\008\128\000\000\008d\019\158\007\176\021f\000\000\000\000\007\218\000\000\001&\000\000\005^\000\000\001V\000\000\0084\000\000\012\022\003z\000\000\012\022\000\000\000\000\024R\000\000\003z\000\000\000\000\tf\000\000\012\022\000\000\008|\019\158\007\196\008\162\000\000\000%\000\000\008r\000O\007\202\008\142I\208\007\212\003\216\000\000.\176\008\178\000\000\008\148I\208\007\218\008\184\000\000\003B.\176\008\186\000\000\008\188\000\000\019\236\000O\003r.\176\008\190\000\000\008\194\000\000\000\000\000\000\tf\000\000\000\000\003z\000\000\006\182\000\000\000%\000\000\000\000\003\154\0224\000\000\003\154\000\000\000\000\007\234\000\000\001&\000\003\021f\000\000\004\006\000Z\004\006\000\000\001\240\000\000\006\182\000\000\006\182\000\000\000\000\000\000\007\232\000\000\000\000\007\242\000\000\003\192\005^\000Z\004\006\000\000\000\000\000\000\001\240\000\000\006\182\000\000\003\192\000\000\000\000\007\168\003D\016\030\000\000\003\250\000\000\008\014\016\030\000\000\000\000\008\014\000\000\000\000\007\244\000\000\000\000\007\252\000\000\005\018\006\182\000\000\005\018\000\000\000\000\008v\000\000\003z\000\000\006\182\000\000\000\000\000\000\017j7\176\000\000\008\222\000\000\017j\008\226\000\000\008\230\000\000.,\000O\005d\000\000.\176\008\232\000\000\002\254\008\184\000O\008\018\008\212I\208\008 \005t\000\000.\176\008\254\000\000\005\242\000\000.\176\t\000\000\000\019\236\000O\006\004\000\000.\176\t\028\000\000\005f\017j\000\000\024R\006\014\000\000.\176\t \000\000\000\000\000\000\005.\000\000\t\016\019\158\008V\t6\000\000\007\020\000\000\t\006\000O\008`\t\030I\208\008d\006\028\000\000.\176\tB\000\000\0062\000\000.\176\tD\000\000\019\236\000O\0066\000\000.\176\tH\000\000\005f\000\000\000\000\008v\000\000\005.\008\168\008\238\000\000\000\000\000\000\008\242\000\000\004~\000\003\000\000\016\030\tD\000\000\000\000.\176\008\166\006\182\000\000\008|\000\000\000\213\000\000.,\000\000\000\000\001\146\016\030\000\000\016\030\000\000\008l\000\000\001\146\000\000=\210\003\134=\210\000\000=\210\000\000\008n\000\000\003\134\000\000\021f\003\142\021f\000\000\021f\000\000\008p\000\000\003\142\000\000=\210\003\134\008r\000\000.,\004\214.,\000\000.,\000\000\008t\000\000\004\214\000\000=\210\003\134\008v\000\000\000\000\024R\000\000\000\000\008\2288\\\000\000\000\000\000\000\000\000\000\000\008\186\000\143\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\1398\\\000\000\0036\001\144\000\000\008\190\000\143\000\000\000\000\000\000\003~\001\144\000\000\000\000\000\000\t\024\000\000\000\000\000\000\000\000\027\180\029\012\000\000Dd\000\0008\\\000\000\00308\\\000\000\004|\000\250\000\250\000\000\000\187\000\250\000\000\008\152\000\000\000\000\000\000\000\000\t\030\000\000\030\004\000\000\030\1508\\\000\000\004\2228\\\000\000\t \000\0008\\\t\"\000\000E\2188\\\t*\000\000\t.\000\000F\186;(8\\\008\1768\\\t4\000\000\t6\000\000\t8\000\000\023\164\000\000\001R\023\164\000\000\008\184\0182\000\000\005\1768\\\000\000\005\1888\\\000\000\004\136\004l\000\143\000\000\000\207\000\143\000\000\008\188\000\000\000\000\000\000\000\000\tH\000\000G\004<\008\tJ\000\000\tL\000\0008\\\tT\000\0008\\\t\\\000\0008\\\tf\000\000D\1768\\8\\\008\2308\\\tj\000\000\tp\000\000E\144\000\000\000\000\005\2108\\\000\000\005\000\005\174\000\143\000\000\000\000\000\000\004\134\000\143\000\000\008\238\000\000\000\000\000\000\000\0008\\\000\000\005\2408\\\000\000\005\028\006D\000\143\008\240\000\000\000\000\000\000\000\000\tv\000\000\tx\000\0008\\\tz\000\000G\228<\008\t|\000\000\t~\000\000\020\158\t(\tX8\178\000\0008\\\t\136\000\000\t\146\000\000\tf\020\1588\\\t\154\000\0008\\\t\156\000\000\t\158\000\000<\008\t\0308\\\t\162\000\000\t\168\000\000\000\143\t\026\000\000\000\000\024R\000\000\000\000\002X\n\002\000\000\000\000\002v\000\000\000\000\000\000.\176\000\000\000\000\000\000\002\174\000\000\004J\000\000\000\000\000\000\004\006ArArAr\000\000\000N\000N\000N\000N\000\000\000\000\000\000\000\000\000\000\000\000\001V\016\030\t\248\013n\003z\000\000\000\000\003z\000\000\tf\000\000'\242\t,\000\000\001V\016\030\t2\014\198\000\000\001V\013n\000\000\000\000\000\000Ar\000N\000\000\000\000\000\000\t|\001\166\t\244J\146\000\000\005\178K\152\000\000\000\000\000\000\005R\t\228\000O\000\000\005\178\000\000\005\206J\146\000\000\000\000\t>\t\244\006\182\t>\000\000\003z\000\000\tf\000\000\022L\004h\000\000\000\000\t\226\000\000\000\000\002X\000\000\004\128\000\000\000\000\000\000.\176\000\000\002\174\000\000\005\n\000\000\000\000\000\000\005^\000\000\n\190\003\196\n\190\000\000\006\182\n\190\000\000\004\210\000\000\006\182\000\000\006\182\000\000\006\182\000\000\017\004\000\000\000\000\000\000\000\000\000\000\006\182\000\000\004\210\000\000\006\182\000\000F\000\000\000\000\000\000\180\tp\000\143\003v\n\014\002\248\000\000\002\248\n8\000\000\n<\000\000\n@\000\000\000\000\002l\002\248\002\030\002\248\000\000\000\000\000\198\tJ\000\000\t\134\000\143\tP\000\000\000\180\nJ\000\000\003v\004\188\nZ\000I\nZ\000\000\000\000\0005\000\143\000\000\003\212\000\000\000\000\000;\000\000\tV\000\000\000\000\000\000\t\146\000\143\tZ\000\000\000\000\000\180\003v\004\188\0005\003\212\000;\t^\000\000\003v\004\188\0005\003\212\000;\tb\000\000\000\143\000\000\nf\nb\t\190\000\143\n,\000\000"), (16, "\011\169\011\169\011\169\011\169\011\169\011\169\011\169\011\169\011\169\011\169\011\169\000z\011\169\011\169\011\169\011\169\011\169\011\169\011\169\011\169\011\169\011\169\000~\011M\000\027\000\031\011\169\011}\011M\011M\001f\016n\011\169\008\186\011\169\011\169\011\169\014\234\004F\011\169\023n\013>\005\237\011\169\011\169\011\169\n:\016r\001\n\n>\001\006\019\230\022\198\024\234\011\169\nB\005\221\011\169\011\169\011M\nF\024\238\021\222\011\169\011\169\011M\011\169\001\206\011\169\011E\014\238\012\202\001\218\011\169\001\n\011\169\011\169\011\169\011\169\011\169\001\n\017\018\011V\011\169\011\169\011\169\021R\011\169\011\169\011\169\011\029\011\169\011\169\011\169\011\169\011\029\011\029\000\198\011\169\011\169\006\133\001\n\027~\014\194\012\158\006\133\006\133\011\029\011\169\011\169\011\169\000\202\014\246\011\169\011\169\011\169\011\169\027f\011\169\027V\011\169\004}\004\209\011\169\001\206\018>\011\169\011\169\012\202\001\218\004\017\018B\011\029\026\206\004r\018F\017B\011\169\003e\005q\011\169\004&\006\133\000\006\011\169\011\169\011\169\011\169\005\006\011\169\005\253\011\169\004a\006m\011\146\011\169\011\169\011\169\001\n\011\169\027\n\011\169\011\169\004\157\011\169\001\006\011\169\011\169\019\186\020\250\011\169\011\169\006u\006u\006u\006u\006u\006u\006u\006u\006u\006u\006u\016\n\006u\006u\006u\006u\006u\006u\006u\006u\006u\006u\021\210\001\n\015\254\012\186\006u\014\198\014\214\014\230\027*\004\209\006u\011^\006u\006u\006u\001\n\000\n\006u\027:\001\006\004^\006u\004}\006u\004\198\027\146\027>\004}\004}\001\006\006\198\004\017\006u\000\018\011j\000\014\004\017\004\017\006\002\004}\004}\006u\006u\021b\001\006\007~\006u\006u\004\017\001\n\021f\006u\020\022\006u\006u\006u\006u\006u\001:\001\n\006m\006u\006u\006u\004}\006u\006u\006u\015r\006u\006u\006u\006u\004\017\001\n\027\018\006u\006u\0002\007\158\0206\020^\020\134\020\150\020\190\006\013\006\013\006u\006u\003\233\012\190\006u\006u\006u\006u\021r\006u\008\222\006u\004f\005\213\006u\001\206\015\254\006u\006u\001\214\001\218\004\t\007\134\0035\006E\014\194\0115\0035\0115\020\030\001\006\006u\001\138\001>\014\246\006u\006u\006u\006u\011\133\006u\015v\006u\022\134\004\209\006\005\006u\006u\006u\001\n\011-\004\t\006u\006u\006\141\006u\006\141\006u\006u\006\141\001\n\006u\006u\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\141\006\021\006\141\015\146\001^\006\141\027\n\003\237\006-\006\141\024\142\006\141\001r\006\141\006\141\006\141\005\213\002\182\006\141\006\141\006\141\016\n\006\141\006\141\006\141\006\141\0115\006\141\006\141\n\134\006\141\012\234\004\t\006\141\0115\005\213\006\141\004\t\004\t\005\213\n\018\004\209\006\141\006\141\006\141\006\141\006\141\006\141\012\134\004\t\012\134\006\141\006\141\024\142\006\141\006\222\006\141\006\141\006\141\026\226\001\006\008\194\006\141\006\141\006\141\004\t\006\141\006\141\006\141\003\002\006\141\006\141\006\141\006\141\004\t\003\"\027\018\003*\006\141\003:\026\230\003N\003R\018\142\001\006\006\141\003B\026\234\006\141\006\141\001\n\006\141\006\141\006\141\006\141\006\141\003\146\006\141\007\193\006\141\006\141\0115\006\141\001\206\027\026\006\141\006\141\012\202\001\218\004\013\003J\014\194\007\193\013\n\001\n\027\018\006\141\024\159\024\163\006\141\014\246\013&\024\167\006\141\006\141\0115\006\141\003\150\006\141\015\254\006\141\020>\012\134\015z\006\141\020f\006=\001\n\014\194\011u\012\134\006\141\n\205\006\141\003Z\006\141\006\141\014\246\026\242\006\141\006\141\0006\000:\000J\000\142\007\162\000\146\n:\000\150\000\218\n>\000\226\007\193\000\242\024\214\000\250\nB\001\002\001\026\001\"\001&\nF\024\218\017\030\003\246\014\194\016\142\nJ\011\141\012M\026\250\005\t\021^\001.\014\246\001\142\nZ\013F\016\182\007\193\013J\016\n\017\146\015\254\0016\020F\014\178\004\237\021\194\020n\005\t\n\205\014\194\007\193\004\013\001\154\003\250\012\134\025\014\004\013\004\013\014\246\016\214\007\193\015\n\013R\025:\025F\016\n\015\014\017N\004\013\026\218\004\014\001\194\007\193\001\198\004\173\001J\016\006\015\022\012\134\004*\021~\013f\001\206\015\026\011\141\013j\011r\001\218\025\255\013n\013r\nn\013v\004\013\012M\012M\026\003\015\030\027r\012M\007\193\006e\016\n\004q\027v\006%\026\006\n\202\013z\0065\016\146\015\"\015&\013~\015*\005\t\001\n\022\186\015>\027N\006M\004\137\0042\0046\015J\013\134\003f\021\206\003n\016\n\003~\008\161\008\161\022\182\005\t\025Z\008\161\003\134\015j\004b\004q\004j\015n\015\170\004\173\nr\020\158\013\138\015\254\015\174\004\130\007\193\006\181\013\142\004\173\004\173\011%\014\194\006\165\004\173\015\182\003\142\013\146\007\193\006\149\006\149\014\246\001\n\002\n\006\149\0006\000:\000J\000\142\007\162\000\146\n:\000\150\000\218\n>\000\226\005\005\000\242\024\214\000\250\nB\001\002\001\026\001\"\001&\nF\024\218\004\138\023f\019\026\003\158\nJ\004\233\024\199\024\203\005\005\011U\001.\024\207\001\142\nZ\013F\023\178\018\018\013J\020\166\006\181\019\206\0016\006}\014\178\023~\006\165\006\157\006}\006}\018z\006\198\011=\001\154\026\031\026#\014\194\025\174\018\170\026'\006}\006\173\015\n\013R\025:\014\246\016\n\015\014\017\150\007\178\004\142\007\186\001\194\007\202\001\198\004\189\001J\016\006\015\022\018\238\007\210\001\006\013f\001\206\015\026\006}\013j\011r\001\218\022\026\013n\013r\nn\013v\004\150\008\161\008\161\005\005\015\030\007\246\008\161\007\254\006\029\008\014\007\218\004\174\006\157\023j\n\202\013z\008\022\001\n\015\"\015&\013~\015*\005\005\001\n\006U\015>\006\173\018\190\004\137\026?\026C\015J\013\134\004\178\026G\t\022\018\218\t\030\006E\t.\008\030\018\254\016\n\018~\007\234\015j\t6\011e\019V\015n\015\170\018\174\nr\0035\013\138\023n\015\174\0035\011]\019j\013\142\019\134\004\189\001\n\004\186\008y\006]\015\182\022\158\013\146\t>\006\189\006\189\011m\008.\002\n\006\189\0006\000:\000J\000\142\007\162\000\146\n:\000\150\000\218\n>\000\226\023\182\000\242\024\214\000\250\nB\001\002\001\026\001\"\001&\nF\024\218\004\206\004\226\025\154\004\246\nJ\tN\005\229\022\170\005\022\005:\001.\005F\001\142\nZ\013F\018\194\025\198\013J\023Z\005N\003Y\0016\005\162\014\178\018\222\005\174\005\250\006\n\006\018\019\002\006\146\006\182\001\154\023\166\006\190\014\194\019Z\006\246\007\002\001\n\007\014\014\242\013R\007\026\014\246\007&\015\014\019n\tZ\019\138\tb\001\194\tr\001\198\004\217\001J\015\018\015\022\0072\tz\007F\013f\001\206\015\026\007V\013j\011r\001\218\007f\013n\013r\nn\013v\0196\007n\007\147\012U\015\030\007\222\007\226\008\"\008&\008\134\t\130\008\138\008\154\008\170\n\202\013z\019:\008\214\015\"\015&\013~\015*\008\230\001\n\008\250\015>\tB\tF\004\137\t\134\t\138\015J\013\134\t\234\t\238\n\002\001\206\n\026\n.\nN\012\202\001\218\016\n\nV\t\146\015j\n^\nf\nj\015n\015\170\004\217\nr\n\158\013\138\n\170\015\174\n\178\n\246\011\022\013\142\004\217\004\217\011\"\011f\011~\004\217\015\182\011\138\013\146\001\n\008\169\008\169\011\166\016n\002\n\008\169\0006\000:\000J\000\142\007\162\000\146\n:\000\150\000\218\n>\000\226\011\178\000\242\016r\000\250\nB\001\002\001\026\001\"\001&\nF\012:\012B\012R\012^\006\222\nJ\012z\012\130\012\150\012\162\012\170\001.\001\206\001\142\nZ\013F\012\202\001\218\013J\012\174\012\182\012\198\0016\007\201\014\178\012\214\012\222\012\226\012\242\012\250\013\018\013\026\013.\001\154\0136\013B\014\194\007\201\013Z\013b\013\182\013\194\014\242\013R\014\n\014\246\001\n\015\014\014\130\014\170\014\190\014\202\001\194\014\210\001\198\014\218\001J\015\018\015\022\014\226\015.\0156\013f\001\206\015\026\015F\013j\011r\001\218\015N\013n\013r\nn\013v\015V\015^\015f\015\162\015\030\015\178\015\186\015\198\015\202\015\210\015\214\006=\015\222\007\201\n\202\013z\015\230\015\246\015\"\015&\013~\015*\016\022\001\n\016Z\015>\016b\016f\016v\016~\0196\015J\013\134\016\130\016\138\016\154\016\162\016\170\016\174\016\190\016\198\016\222\016\n\016\230\0176\015j\019:\017~\017\138\015n\015\170\017\254\nr\018\n\013\138\018*\015\174\018V\006\222\018b\013\142\018j\018\134\018\146\007\201\018\154\001\206\015\182\018\158\013\146\012\202\001\218\018\166\018\182\018\202\002\n\007\201\0006\000:\000J\000\142\007\162\000\146\n:\000\150\000\218\n>\000\226\018\230\000\242\019\n\000\250\nB\001\002\001\026\001\"\001&\nF\019\"\019*\001\n\019.\019>\nJ\019F\019J\019R\019b\019v\001.\019\146\001\142\nZ\013F\019\166\019\182\013J\019\198\019\222\019\238\0016\019\250\014\178\020+\020S\020{\020\147\020\179\020\203\020\226\020\254\001\154\021j\021\147\014\194\021\234\021\255\022'\0223\006=\014\242\013R\022C\014\246\022K\015\014\022^\022g\022o\022w\001\194\022\146\001\198\022\210\001J\015\018\015\022\022\231\022\247\022\255\013f\001\206\015\026\023\011\013j\011r\001\218\023\023\013n\013r\nn\013v\023#\0236\023?\012U\015\030\023G\023\138\023\190\023\211\023\219\023\231\023\247\023\255\024\n\n\202\013z\024\014\024\031\015\"\015&\013~\015*\024'\001\n\024.\015>\024;\024G\024O\024Z\024c\015J\013\134\024k\024w\024\146\025\026\025B\025R\025\134\025\142\025\178\016\n\025\214\025\218\015j\025\226\026\011\026\210\015n\015\170\026\222\nr\026\238\013\138\026\246\015\174\026\254\027'\027.\013\142\0277\027B\027R\027\135\027\150\027\159\015\182\027\195\013\146\027\223\012U\012U\027\238\027\242\002\n\012U\0006\000:\000J\000\142\007\162\000\146\n:\000\150\000\218\n>\000\226\027\246\000\242\024\214\000\250\nB\001\002\001\026\001\"\001&\nF\024\218\027\255\000\000\000\000\000\000\nJ\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nZ\013F\000\000\000\000\013J\000\000\000\000\000\000\0016\000\000\014\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\n\013R\000\000\000\000\000\000\015\014\026V\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\016\006\015\022\000\000\000\000\000\000\013f\001\206\015\026\000\000\013j\011r\001\218\000\000\013n\013r\nn\013v\000\000\000\000\000\000\000\000\015\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\013z\000\000\000\000\015\"\015&\013~\015*\000\000\001\n\000\000\015>\000\000\000\000\004\137\000\000\000\000\015J\013\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015j\000\000\000\000\000\000\015n\015\170\000\000\nr\000\000\013\138\000\000\015\174\000\000\000\000\000\000\013\142\000\000\000\000\000\000\000\000\000\000\000\000\015\182\000\000\013\146\000\000\008\141\008\141\000\000\000\000\002\n\008\141\0006\000:\000J\000\142\007\162\000\146\n:\000\150\000\218\n>\000\226\000\000\000\242\000\000\000\250\nB\001\002\001\026\001\"\001&\nF\000\000\000\000\000\000\000\000\000\000\nJ\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nZ\013F\000\000\000\000\013J\000\000\000\000\000\000\0016\000\000\014\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\n\013R\000\000\000\000\000\000\015\014\016\030\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\016\006\015\022\000\000\000\000\000\000\013f\001\206\015\026\000\000\013j\011r\001\218\000\000\013n\013r\nn\013v\000\000\000\000\000\000\0121\015\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\013z\000\000\000\000\015\"\015&\013~\015*\000\000\001\n\000\000\015>\000\000\000\000\000\000\000\000\000\000\015J\013\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015j\000\000\000\000\000\000\015n\015\170\000\000\nr\000\000\013\138\000\000\015\174\000\000\000\000\000\000\013\142\000\000\000\000\000\000\000\000\000\000\000\000\015\182\000\000\013\146\000\000\0121\0121\000\000\000\000\002\n\0121\0006\000:\000J\000\142\007\162\000\146\n:\000\150\000\218\n>\000\226\000\000\000\242\000\000\000\250\nB\001\002\001\026\001\"\001&\nF\000\000\000\000\000\000\000\000\000\000\nJ\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nZ\013F\000\000\000\000\013J\000\000\000\000\000\000\0016\000\000\014\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\n\013R\000\000\000\000\000\000\015\014\025\030\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\016\006\015\022\000\000\000\000\000\000\013f\001\206\015\026\000\000\013j\011r\001\218\000\000\013n\013r\nn\013v\000\000\000\000\000\000\000\000\015\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\013z\000\000\000\000\015\"\015&\013~\015*\000\000\001\n\000\000\015>\000\000\000\000\000\000\000\000\000\000\015J\013\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015j\000\000\000\000\000\000\015n\015\170\000\000\nr\000\000\013\138\000\000\015\174\000\000\000\000\000\000\013\142\000\000\000\000\000\000\000\000\000\000\000\000\015\182\000\000\013\146\000\000\012}\012}\000\000\000\000\002\n\012}\0006\000:\000J\000\142\007\162\000\146\n:\000\150\000\218\n>\000\226\000\000\000\242\000\000\000\250\nB\001\002\001\026\001\"\001&\nF\000\000\000\000\000\000\000\000\000\000\nJ\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nZ\013F\000\000\000\000\013J\000\000\000\000\000\000\0016\000\000\014\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\n\013R\000\000\000\000\000\000\015\014\025\030\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\016\006\015\022\000\000\000\000\000\000\013f\001\206\015\026\000\000\013j\011r\001\218\000\000\013n\013r\nn\013v\000\000\000\000\000\000\000\000\015\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\013z\000\000\000\000\015\"\015&\013~\015*\000\000\001\n\000\000\015>\000\000\000\000\000\000\000\000\000\000\015J\013\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015j\000\000\000\000\000\000\015n\015\170\000\000\nr\000\000\013\138\000\000\015\174\000\000\000\000\000\000\013\142\000\000\000\000\000\000\000\000\000\000\000\000\015\182\000\000\013\146\000\000\012y\012y\000\000\000\000\002\n\012y\0006\000:\000J\000\142\007\162\000\146\n:\000\150\000\218\n>\000\226\000\000\000\242\000\000\000\250\nB\001\002\001\026\001\"\001&\nF\000\000\000\000\000\000\000\000\000\000\nJ\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nZ\013F\000\000\000\000\013J\000\000\000\000\000\000\0016\000\000\014\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\n\013R\000\000\000\000\000\000\015\014\017\202\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\016\006\015\022\000\000\000\000\000\000\013f\001\206\015\026\000\000\013j\011r\001\218\000\000\013n\013r\nn\013v\000\000\000\000\000\000\000\000\015\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\013z\000\000\000\000\015\"\015&\013~\015*\000\000\001\n\000\000\015>\n:\000\000\000\000\n>\000\000\015J\013\134\024\234\000\000\nB\000\000\000\000\000\000\000\000\nF\024\238\000\000\000\000\000\000\015j\000\000\000\000\000\000\015n\015\170\000\000\nr\000\000\013\138\000\000\015\174\000\000\000\000\000\000\013\142\000\000\000\000\000\000\000\000\000\000\000\000\015\182\016n\013\146\000\000\0006\000:\000J\000\142\002\n\000\146\n:\000\150\000\218\n>\000\226\000\000\000\242\016r\000\250\nB\001\002\001\026\001\"\001&\nF\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\001\206\001\142\000\000\013F\012\202\001\218\013J\000\000\000\000\000\000\0016\000\000\018J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018Z\013R\000\000\000\000\001\n\000\000\000\000\000\000\000\000\004\157\001\194\000\000\001\198\000\000\001J\000\000\000\000\000\000\000\000\000\000\013f\001\206\000\000\000\000\013j\001\214\001\218\000\000\013n\013r\nn\013v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\013z\005\205\007\190\005\205\005\205\013~\005\205\005\205\001\n\005\205\008\002\005\205\000\000\005\205\000\000\005\205\000\000\013\134\005\205\005\205\005\205\005\205\000\000\005\205\000\000\005\205\000\000\000\000\005\205\000\000\005\205\005\205\000\000\005\205\000\000\005\205\005\205\nr\005\205\013\138\005\205\018^\005\205\005\205\005\205\013\142\005\205\000\000\005\205\000\000\005\205\000\000\018f\000\000\013\146\000\000\005\205\005\205\008\162\005\205\002\n\000\000\005\205\000>\005\205\000>\001N\005\205\008\242\005\205\000\000\000>\005\205\000>\005\205\000\000\005\205\005\205\000\000\000\000\000\000\000\000\005\205\000\000\005\205\000\000\005\205\005\205\005\205\005\205\005\205\000\000\005\205\000\000\000\000\000\000\005\205\005\205\005\205\000\000\005\205\000\000\005\205\000\000\005\205\000\000\005\205\005\205\005\205\005\205\005\205\005\205\005\205\005\205\005\205\000\000\005\205\005\205\005\205\005\205\005\205\005\205\005\205\005\205\005\205\005\205\000\000\000\000\000\000\000\000\005\205\000\000\000\000\005\205\000\000\000\000\000\000\000\000\005\205\000\000\005\205\000\000\005\205\005\205\005\205\005\205\000\000\000\000\005\205\000\000\000\000\000\000\005\205\005\205\005\205\005\205\005\205\005\205\005\205\005\205\000\000\005\205\000\000\000\000\005\205\005\205\005\205\005\205\000\000\005\205\000\000\005\205\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\000\000\001\146\000\000\000\000\001\150\003\022\003\030\000\142\0016\000\146\000\000\003b\003\166\000\000\003\174\000\000\003\190\000\000\003\198\001\154\003\206\003\218\001\158\003\226\000\000\000\000\000\000\000\000\001\182\001\178\000\000\001\186\000\000\000\000\000\000\000\000\003\234\000\000\001\194\000\000\001\198\000\000\001J\000\000\000\000\000\000\000\000\003\242\001\202\001\206\000\000\000\000\001\210\001\214\001\218\002.\001\222\001\226\000\000\001\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\234\000\000\000\000\000\000\000\000\001\238\004\002\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\0006\007\166\007\174\000\142\000\000\000\146\000\000\007\242\0086\001\250\008>\020\230\008N\000\000\008V\000\000\008^\008j\001\"\008r\000\000\001\254\000\000\020\234\000\000\000\000\000\000\002\002\000\000\001\n\004]\020\238\008z\020\242\000\000\000\000\002\006\000\000\020\246\000\000\000\000\000\000\002\n\024\006\000\000\000\000\021\006\000\000\000\000\000\000\021\n\t\n\t\018\000\142\000\000\000\146\021\014\tV\t\154\000\000\t\162\000\000\t\178\008\146\t\186\000\000\t\194\t\206\022z\t\214\000\000\000\000\021\018\023J\000\000\000\000\000\000\008\158\000\000\000\000\000\000\000\000\t\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\230\000\000\000\000\000\000\021\022\000\000\000\000\021\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\030\000\000\000\000\000\000\000\000\021\"\001\n\021&\000\000\021*\021.\000\000\0212\000\000\nJ\t\246\000\000\000\000\0216\000\000\000\000\021:\001\142\nZ\013F\000\000\000\000\013J\000\000\000\000\000\000\000\000\000\000\014\178\000\000\000\000\021>\000\000\000\000\000\000\021B\021F\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015:\013R\000\000\000\000\000\000\015\014\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\015\022\000\000\000\000\000\000\013f\001\206\015\026\000\000\013j\011r\001\218\000\000\013n\013r\000\000\013v\000\000\000\000\000\000\000\000\015\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\013z\000\000\000\000\015\"\015&\013~\015*\000\000\001\n\000\000\015>\n:\000\000\000\000\n>\000\000\015J\013\134\024\234\nJ\nB\000\000\000\000\000\000\000\000\nF\024\238\001\142\nZ\013F\015j\000\000\013J\000\000\015n\015\170\000\000\000\000\014\178\013\138\000\000\015\174\000\000\000\000\000\000\013\142\000\000\001\154\000\000\000\000\000\000\000\000\015\182\016n\013\146\000\000\013N\013R\000\000\000\000\002\n\015\014\000\000\000\000\000\000\000\000\001\194\000\000\001\198\016r\000\000\000\000\015\022\000\000\000\000\000\000\013f\001\206\015\026\000\000\013j\011r\001\218\000\000\013n\013r\000\000\013v\000\000\001\206\000\000\000\000\015\030\012\202\001\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\013z\000\000\000\000\015\"\015&\013~\015*\000\000\001\n\000\000\015>\013\133\000\000\000\000\013\133\000\000\015J\013\134\000\000\000\000\001\n\000\000\000\000\000\000\000\000\004\157\000\000\000\000\000\000\013\133\015j\000\000\000\000\013\133\015n\015\170\002\"\013\133\000\000\013\138\000\000\015\174\000\000\013\133\000\000\013\142\013\133\013\133\000\000\013\133\013\133\000\000\015\182\002*\013\146\013\133\005\014\000\000\000\000\013\133\002\n\000\000\013\133\000\000\013\133\013\133\000\000\000\000\007\137\007\137\000\000\000\000\000\000\007\137\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\013\133\000\242\013\133\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\000\000\013\133\000\000\000\000\000\000\000\000\000\000\000\000\005\026\000\000\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\000\000\000\000\000\000\013\133\013\133\000\000\013\133\013\133\005\030\000\000\013\133\000\000\000\000\000\000\000\000\000\000\000\000\001F\005&\000\000\000\000\000\000\000\000\013\133\000\000\000\000\013\133\013\133\013\133\013\133\000\000\001J\000\000\000\000\013\133\013\133\013\133\000\000\013\133\013\133\013\133\001=\001=\001=\001=\000\000\001=\000\000\001=\001=\000\000\001=\000\000\001=\000\000\001=\000\000\001=\001=\001=\001=\000\000\000\000\004\233\000\000\020\214\004\233\000\000\000\000\000\000\000\000\000\000\001=\001=\001=\000\000\000\000\000\000\000\000\001=\000\000\004\233\000\000\000\000\001=\004\233\000\000\001=\004\233\004\233\000\000\001=\000\000\000\000\020\218\004\233\000\000\001=\004\233\004\233\000\000\004\233\004\233\000\000\001=\004\233\000\000\004\233\004\233\001=\000\000\004\233\000\000\000\000\004\233\000\000\004\233\004\233\001=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\233\001=\004\233\000\000\001=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\233\000\000\000\000\000\000\001=\000\000\000\000\004\233\000\000\001=\001\n\001=\000\000\000\000\001=\000\000\020\222\000\000\000\000\000\000\000\000\000\000\001=\000\000\000\000\001=\004\233\004\233\000\000\004\233\005\005\004\233\000\000\004\233\000\000\000\000\000\000\000\000\000\000\000\000\001=\004\233\000\000\000\000\001=\001=\004\233\004\237\000\000\004\233\004\237\004\233\000\000\000\000\000\000\021\150\000\000\004\233\004\233\004\233\000\000\004\233\004\233\004\233\000\000\004\237\000\000\000\000\000\000\004\237\000\000\000\000\004\237\004\237\000\000\000\000\000\000\000\000\000\000\004\237\000\000\000\000\004\237\004\237\000\000\004\237\004\237\000\000\000\000\004\237\000\000\004\237\004\237\000\000\000\000\004\237\000\000\000\000\004\237\000\000\004\237\004\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0006\007\166\007\174\000\142\000\000\000\146\000\000\007\242\0086\000\000\008>\004\237\008N\004\237\008V\000\000\008^\008j\001\"\008r\000\000\000\000\000\000\004\237\000\000\000\000\000\000\000\000\000\000\000\000\004\237\000\000\008z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\130\000\000\000\000\000\000\000\000\000\000\004\237\004\237\000\000\004\237\005\t\004\237\000\000\004\237\000\000\000\000\000\000\000\000\000\000\000\000\008\146\004\237\013\217\000\000\000\000\013\217\004\237\000\000\000\000\004\237\000\000\004\237\000\000\000\000\008\158\000\000\000\000\004\237\004\237\004\237\013\217\004\237\004\237\004\237\013\217\000\000\000\000\013\166\013\217\000\000\000\000\000\000\000\000\000\000\013\217\000\000\000\000\013\217\013\217\000\000\013\217\013\217\000\000\000\000\013\174\000\000\013\217\013\186\000\000\000\000\013\217\000\000\000\000\013\217\000\000\013\217\013\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\217\000\000\013\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\217\000\000\000\000\000\000\000\000\000\000\000\000\013\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\217\013\217\000\000\013\217\000\000\013\202\000\000\013\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\217\000\000\013\217\000\000\000\000\000\000\000\000\000\000\013\217\013\217\013\217\000\000\013\217\013\217\013\217\nU\nU\nU\nU\000\000\nU\000\000\nU\nU\000\000\nU\000\000\nU\000\000\nU\000\000\nU\nU\nU\nU\000\000\000\000\001\137\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\nU\nU\nU\000\000\000\000\000\000\000\000\nU\000\000\001\137\000\000\000\000\nU\001\137\000\000\021\166\000\000\001\137\000\000\021\174\000\000\000\000\000\000\001\137\000\000\nU\001\137\001\137\000\000\001\137\001\137\000\000\nU\000\000\000\000\001\137\000\000\nU\000\000\001\137\000\000\000\000\001\137\000\000\001\137\001\137\nU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\nU\001\137\000\000\nU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\000\000\000\000\000\000\nU\000\000\000\000\000\000\000\000\nU\000\000\nU\000\000\000\000\nU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nU\000\000\000\000\nU\001\137\002>\000\000\001\137\001\137\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\000\000\nU\000\000\000\000\000\000\022\002\nU\001\137\000\000\000\000\001\137\001\137\001\137\001\137\000\000\000\000\000\000\000\000\002\230\001\137\001\137\000\000\001\137\001\137\001\137\nE\nE\nE\nE\000\000\nE\000\000\nE\nE\000\000\nE\000\000\nE\000\000\nE\000\000\nE\nE\nE\nE\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\161\000\000\000\000\000\000\nE\nE\nE\000\000\000\000\000\000\000\000\nE\000\000\000\000\000\000\000\000\nE\000\000\013\161\000\000\000\000\000\000\000\000\000\000\000\000\011\006\000\000\000\000\000\000\nE\000\000\000\000\013\161\000\000\000\000\000\000\nE\000\000\013\161\013\161\000\000\nE\011\014\000\000\000\000\011\026\000\000\000\000\013\161\000\000\nE\013\161\000\000\013\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nE\000\000\000\000\nE\013\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nE\000\000\000\000\000\000\000\000\nE\000\000\nE\011&\000\000\nE\000\000\nI\nI\nI\nI\000\000\nI\nE\nI\nI\nE\nI\000\000\nI\000\000\nI\013\161\nI\nI\nI\nI\011*\000\000\013\161\000\000\nE\000\000\000\000\000\000\021\170\nE\0112\nI\nI\nI\000\000\013\161\000\000\000\000\nI\000\000\000\000\000\000\000\000\nI\000\000\000\000\022\006\000\000\000\000\000\000\013\161\013\161\000\000\000\000\000\000\000\000\nI\000\000\000\000\000\000\000\000\000\000\000\000\nI\000\000\000\000\000\000\000\000\nI\000\000\000\000\000\000\000\000\0006\007\166\007\174\000\142\nI\000\146\000\000\007\242\0086\000\000\008>\000\000\008N\000\000\008V\000\000\008^\008j\001\"\008r\000\000\000\000\000\000\000\000\nI\000\000\000\000\nI\000\000\000\000\000\000\022\014\008z\022*\000\000\000\000\000\000\000\000\0226\nI\000\000\000\000\000\000\008\130\nI\000\000\nI\000\000\000\000\nI\000\000\000\000\000\000\000\000\000\000\000\000\022N\nI\000\000\000\000\nI\000\000\000\000\008\146\000\000\000\000\000\000\000\000\022z\000\000\002^\000\000\000\000\002\174\000\000\nI\000\000\008\158\000\000\000\000\nI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\000\002\005\000\000\000\000\000\000\002\005\022\154\000\000\000\000\022\234\000\000\002n\000\000\000\000\002\005\002\005\000\000\002\206\002\214\000\000\000\000\023\002\000\000\002\005\000\000\000\000\023\014\002\142\008u\000\000\002v\023\026\002\134\002\005\000}\000\000\000\000\000}\000\000\023&\000\000\000\000\023\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\002\150\000\000\002\005\000}\023\234\000\000\000\000\000}\000\000\024\002\000\000\000\000\002\005\002n\000\000\000\000\000}\000}\000\000\000}\000}\000\000\000\000\000\000\000\000\000}\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000}\000\000\000\000\002\158\000\000\000\000\002\005\002\005\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000}\002\005\000\000\000\000\002\005\002\005\002\005\002\005\000\000\000\000\000}\000\000\000\000\002\005\002\005\000\000\002\222\002\166\002\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\158\000\000\000\000\000}\000}\000\000\000\000\002~\000\000\000\000\000\000\000\000\000e\000\000\000\000\000e\000\000\000\000\000\000\000\000\000}\000\000\000\000\000}\000}\000}\000}\000\000\000\000\000\000\000e\000\000\000}\000}\000e\000}\002\166\000}\000e\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000e\000e\000\000\000e\000e\000\000\000\000\000\000\000\000\000e\000\000\000\000\000\000\000e\000\000\000\000\002v\000\000\002\134\000e\000]\000\000\000\000\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\000e\000\000\000e\000]\000\000\000\000\000\000\000]\000\000\000\000\000\000\000\000\000e\000]\000\000\000\000\000]\000]\000\000\000]\000]\000\000\000\000\000\000\000\000\000]\000\000\000\000\000\000\000]\000\000\000\000\002v\000\000\000]\000]\000\000\000\000\000e\000\000\000\000\000e\000e\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\000\000\000]\000e\000\000\000\000\000e\000e\000e\000e\000\000\000\000\000]\000\000\000\000\000e\000e\000\000\000e\000e\000e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\000\000\000\000\000]\000]\000\000\000\000\002~\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000\000\000\000\000\000\000\000\000]\000\000\000\000\000]\000]\000]\000]\000\000\000\000\000\000\000a\000\000\000]\000]\000a\000]\000]\000]\000a\000\000\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000a\000\000\000a\000a\000\000\000\000\000\000\000\000\000a\000\000\000\000\000\000\000a\000\000\000\000\002v\000\000\000a\000a\000q\000\000\000\000\000q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\000a\000\000\000a\000q\000\000\000\000\000\000\000q\000\000\000\000\000\000\000\000\000a\002n\000\000\000\000\000q\000q\000\000\000q\000q\000\000\000\000\000\000\000\000\000q\000\000\000\000\000\000\000q\000\000\000\000\002v\000\000\002\134\000q\000\000\000\000\000a\000\000\000\000\000a\000a\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000q\000a\000\000\000\000\000a\000a\000a\000a\000\000\000\000\000q\000\000\000\000\000a\000a\000\000\000a\000a\000a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000\000\000\000\002~\000\000\000\000\000\000\000\000\000i\000\000\000\000\000i\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000q\000q\000\000\000\000\000\000\002f\000\000\000q\000q\000i\000q\000q\000q\000i\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000i\000i\000\000\000i\000i\000\000\000\000\000\000\000\000\000i\000\000\000\000\000\000\000i\000\000\000\000\002v\000\000\002\134\000i\000m\000\000\000\000\000m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\000i\000\000\000i\000m\000\000\000\000\000\000\000m\000\000\000\000\000\000\000\000\000i\002n\000\000\000\000\000m\000m\000\000\000m\000m\000\000\000\000\000\000\000\000\000m\000\000\000\000\000\000\000m\000\000\000\000\002v\000\000\002\134\000m\000\000\000\000\000i\000\000\000\000\000i\000i\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000m\000i\000\000\000\000\000i\000i\000i\000i\000\000\000\000\000m\000\000\000\000\000i\000i\000\000\000i\000i\000i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000\000\000\000\002~\000\000\000\000\000\000\000\000\000u\000\000\000\000\000u\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000m\000m\000\000\000\000\000\000\002f\000\000\000m\000m\000u\000m\000m\000m\000u\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000u\000u\000\000\000u\000u\000\000\000\000\000\000\000\000\000u\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000u\002^\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\002\150\000\000\000u\000\133\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000u\002n\000\000\000\000\000\133\000\133\000\000\000\133\002\214\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000\133\000\000\000\000\002\158\000\000\000\000\000u\000u\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000\133\000u\000\000\000\000\000u\000u\000u\000u\000\000\000\000\000\133\000\000\000\000\000u\000u\000\000\000u\000u\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\158\000\000\000\000\000\133\000\133\000\000\000\000\002~\000\000\000\000\000\000\000\000\002^\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\133\000\133\000\133\000\133\000\000\000\000\000\000\002f\000\000\000\133\000\133\000y\002\222\002\166\000\133\000y\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000y\000y\000\000\000y\000y\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000y\002^\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\002\150\000\000\000y\000\129\000\000\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000y\002n\000\000\000\000\000\129\000\129\000\000\000\129\002\214\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000\129\000\000\000\000\002\158\000\000\000\000\000y\000y\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000\129\000y\000\000\000\000\000y\000y\000y\000y\000\000\000\000\000\129\000\000\000\000\000y\000y\000\000\000y\002\166\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\158\000\000\000\000\000\129\000\129\011z\000\000\002~\000\000\000\000\004A\000\000\004A\000\000\000\000\004A\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\129\000\129\000\129\000\129\000\000\000\000\000\000\004A\000\000\000\129\000\129\000\000\000\129\002\166\000\129\000\000\004A\004A\000\000\000\000\004A\004A\000\000\000\000\000\000\000\000\004A\000\000\004A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004A\004A\000\000\000\000\004A\004A\004A\000\000\004A\004A\000\000\004A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004A\004A\000\000\000\000\000\000\000\000\004A\000\000\000\000\004A\000\000\000\000\000\000\000\000\000\000\001\142\000\000\n\142\004A\000\000\n\146\000\000\000\000\000\000\000\000\000\000\004A\000\000\004A\000\000\004A\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\004A\000\000\000\000\000\000\n\150\n\238\004A\000\000\011V\011n\000\000\000\000\004A\000\000\001\194\004A\001\198\000\000\000\000\000\000\000\000\004A\000\000\000\000\n\182\001\206\000\000\000\000\n\186\011r\001\218\000\000\n\190\n\194\000\000\n\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\n\206\000\000\000\000\000\000\000\000\n\210\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\001\142\000\000\n\142\n\218\000\000\n\146\000\000\000\000\000\000\000\000\000\000\005\253\000\000\011v\000\000\011\146\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\n\222\000\000\000\000\000\000\n\150\n\238\n\226\000\000\011V\011n\000\000\000\000\012r\000\000\001\194\n\230\001\198\000\000\000\000\000\000\000\000\002\n\000\000\000\000\n\182\001\206\000\000\000\000\n\186\011r\001\218\000\000\n\190\n\194\000\000\n\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\n\206\000\000\000\000\000\000\000\000\n\210\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\001\142\000\000\n\142\n\218\000\000\n\146\000\000\000\000\000\000\000\000\000\000\005\253\000\000\011v\000\000\011\146\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\n\222\000\000\000\000\000\000\n\150\n\238\n\226\000\000\011V\011n\000\000\000\000\011\154\000\000\001\194\n\230\001\198\000\000\000\000\000\000\000\000\002\n\000\000\000\000\n\182\001\206\000\000\000\000\n\186\011r\001\218\000\000\n\190\n\194\000\000\n\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\n\206\000\000\000\000\000\000\000\000\n\210\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\001\142\000\000\n\142\n\218\000\000\n\146\000\000\000\000\000\000\000\000\000\000\005\253\000\000\011v\000\000\011\146\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\n\222\000\000\000\000\000\000\n\150\n\238\n\226\000\000\011V\011n\000\000\000\000\005a\000\000\001\194\n\230\001\198\000\000\000\000\000\000\000\000\002\n\000\000\000\000\n\182\001\206\000\000\000\000\n\186\011r\001\218\000\000\n\190\n\194\000\000\n\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\n\206\000\000\000\000\000\000\000\000\n\210\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\253\000\000\011v\003%\011\146\000N\003%\000V\000\000\000f\003%\000\000\003%\000\000\n\222\000\000\000n\003%\003%\000\000\n\226\000\000\000\000\000\000\000\000\000\000\001\189\000\000\000\000\n\230\000\000\000\000\000\000\000\000\000\000\002\n\000\000\000\000\000\000\000\000\000v\003%\000\000\000\000\000\000\003%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003%\000\134\000\000\000\000\000\000\000\000\000\000\000\000\003%\000\000\000\000\000\000\003%\003%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003%\001\137\000\000\000\000\001\137\000\000\000\000\000\000\000\000\003!\003%\000\154\003!\000\162\000\000\000\178\003!\000\000\003!\001\137\003%\000\000\000\186\003!\003!\003%\000\000\001\137\000\000\000\000\000\000\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\001\137\001\137\000\000\000\000\000\000\000\000\000\000\000\194\003!\000\000\001\137\000\000\003!\001\137\000\000\001\137\001\137\003%\000\000\000\000\003%\003%\000\000\000\000\003%\000\000\000\000\000\000\003!\003%\003%\000\000\000\000\000\000\003%\000\000\001\137\000\000\001\137\000\000\003!\000\210\000\000\000\000\000\000\000\000\000\000\000\000\003!\000\000\000\000\000\000\003!\003!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000\000\001\137\0026\000\000\001\137\001\137\000\000\000\000\001\137\003!\000\000\000\000\000\000\000\000\003!\000\000\000\000\000\000\000\000\000\000\000\000\001\137\000\000\000\000\001\137\001\137\001\142\001\137\n\142\000\000\000\000\n\146\002\242\001\137\001\137\000\000\001\137\001\137\001\137\000\000\000\000\000\000\000\000\000\000\000\000\003!\001\154\000\000\003!\003!\000\000\000\000\003!\000\000\000\000\n\150\n\238\003!\003!\011V\011n\000\000\003!\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\182\001\206\000\000\000\000\n\186\011r\001\218\000\000\n\190\n\194\000\000\n\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\n\206\000\000\000\000\000\000\000\000\n\210\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\218\000\000\000\000\001\161\000\000\000\000\001\161\000\000\005\253\000\000\000\000\000\000\011\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\161\n\222\000\000\000\000\001\161\000\000\000\000\n\226\001\161\000\000\000\000\000\000\000\000\001\201\001\161\000\000\n\230\001\161\001\161\000\000\001\161\001\161\002\n\000\000\000\000\000\000\001\161\000\000\000\000\000\000\001\161\000\000\000\000\001\161\000\000\001\161\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0006\000:\000J\000\142\007\162\000\146\n:\000\150\000\218\n>\000\226\001\161\000\242\001\161\000\250\nB\001\002\001\026\001\"\001&\nF\000\000\000\000\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\000\000\000\000\000\000\001\161\013\246\000\000\001\161\000\000\000\000\000\000\001\161\000\000\000\000\000\000\000\000\000\000\000\000\001F\000\000\000\000\000\000\000\000\000\000\001R\000\000\000\000\001\161\000\000\001\161\000\000\000\000\001J\000\000\000\000\013\254\001\161\001\161\000\000\001\161\001\161\001\161\000\000\000\000\000\000\000\000\000\000\000\000\nn\000\000\000\000\000\000\000\000\000\000\000\000\001\142\000\000\001\146\000\000\000\000\001\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\182\000\000\000\000\000\000\001\n\000\000\001\154\000\000\000\000\001\158\000\000\000\000\000\000\000\000\000\000\001\174\001\178\000\000\001\186\000\000\n\138\000\000\000\000\001V\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\005\245\nr\000\000\001\202\001\206\000\000\011\130\001\210\001\214\001\218\005\245\001\222\001\226\000\000\001\230\005\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\189\000\000\000\000\013\189\000\000\000\000\000\000\001\234\000\000\000\000\000\000\000\000\001\238\000\000\000\000\001\n\000\000\000\000\013\189\000\000\000\000\000\000\013\189\000\000\001\246\005\146\000\000\000\000\000\000\000\000\000\000\000\000\013\189\000\000\001\250\008\133\013\189\000\000\013\189\013\189\000\000\000\000\005\154\008B\005\205\005\166\001\254\000\000\013\189\000\000\000\000\013\189\002\002\013\189\000\000\008\133\005\205\008\133\000\000\000\000\000\000\002\006\000\000\000\000\005\205\000\000\005\205\002\n\t\"\005\205\000\000\005\205\000\000\000\000\013\189\000\000\005\205\000\000\000\000\005\205\000\000\005\205\000\000\005\205\000\000\000\000\013\189\000\000\000\000\005\205\000\000\005\205\000\000\005\178\000\000\000\000\005\205\000\000\000\000\000\000\005\205\005\205\000\000\000\000\005\205\005\205\000>\000\000\005\205\000\000\005\205\000\000\013\189\013\189\005\205\013\189\000\000\005\182\000\000\013\189\000\000\000\000\000\000\000\000\000\000\005\205\t\250\005\190\000\000\tf\005\205\000>\t\166\005\205\000\000\005\205\000\000\013\189\000\000\000\000\000\000\000\000\005\205\013\189\000\000\005\205\000\000\013\189\013\189\013\189\005\205\005\205\005\205\005\205\005\205\005\205\000\000\005\205\005\205\000\000\005\205\000\000\005\205\005\205\000\000\005\205\005\205\000\000\005\205\005\205\005\205\000\000\005\205\000\000\000\000\005\205\005\205\005\205\005\205\005\205\005\205\005\205\005\205\000\000\000\000\005\205\005\205\n&\005\205\005\205\000\000\005\205\000>\000\000\005\205\000>\005\205\000\000\000\000\005\205\000\000\000\000\000\000\000\000\000\000\000\000\005\205\000\000\000\000\000\000\005\205\005\205\000\000\000\000\000\000\000\000\005\205\000\000\000\000\005\205\000\000\000\000\005\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\205\000\000\000\000\005\205\000\000\005\205\005\205\005\205\005\205\005\205\005\205\000\000\005\205\005\205\000\000\005\205\014*\000\000\005\205\014z\000\000\005\205\000\000\000\000\005\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0142\000\000\005\205\000\000\002\021\005\205\005\205\005\205\002\021\005\205\005\205\000\000\000\000\000\000\014:\000\000\000\000\002\021\002\021\000\000\014\138\014\146\000\000\000\000\000\000\000\000\002\021\000\000\001%\000\000\014Z\001%\000\000\014B\000\000\014R\002\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0142\000\000\000\000\000\000\001%\000\000\000\000\000\000\001%\000\000\014b\000\000\002\021\000\000\014:\000\000\000\000\001%\001%\000\000\001%\001%\002\021\000\000\000\000\000\000\001%\000\000\000\000\000\000\014Z\000\000\000\000\014B\000\000\014R\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014j\000\000\000\000\002\021\000\000\000\000\000\000\014J\014b\000\000\001%\000\000\001\013\000\000\000\000\001\013\000\000\000\000\000\000\000\000\001%\000\000\000\000\002\021\000\000\002\021\000\000\000\000\000\000\000\000\001\013\000\000\002\021\002\021\001\013\014\154\014r\002\021\001\013\000\000\000\000\000\000\000\000\000\000\014:\000\000\014j\001\013\001\013\001%\001\013\001\013\000\000\014J\000\000\000\000\001\013\000\000\001\005\000\000\001\013\001\005\000\000\014B\000\000\014R\001\013\000\000\000\000\001%\000\000\001%\000\000\000\000\000\000\000\000\001\005\000\000\001%\001%\001\005\001%\014r\001%\001\005\000\000\001\013\000\000\001\013\000\000\001\005\000\000\000\000\001\005\001\005\000\000\001\005\001\005\001\013\000\000\000\000\000\000\001\005\000\000\000\000\000\000\001\005\000\000\000\000\014B\000\000\001\005\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\000\000\000\000\001\013\000\000\000\000\000\000\014J\001\005\000\000\001\005\000\000\001\t\000\000\000\000\001\t\000\000\000\000\000\000\000\000\001\005\000\000\000\000\001\013\000\000\001\013\000\000\000\000\000\000\000\000\001\t\000\000\001\013\001\013\001\t\001\013\001\013\001\013\001\t\000\000\000\000\000\000\000\000\000\000\001\t\000\000\001\005\001\t\001\t\001\005\001\t\001\t\000\000\014J\000\000\000\000\001\t\000\000\001\025\000\000\001\t\001\025\000\000\014B\000\000\001\t\001\t\000\000\000\000\001\005\000\000\001\005\000\000\000\000\000\000\000\000\0142\000\000\001\005\001\005\001\025\001\005\001\005\001\005\001\025\000\000\001\t\000\000\001\t\000\000\014:\000\000\000\000\001\025\001\025\000\000\001\025\001\025\001\t\000\000\000\000\000\000\001\025\000\000\000\000\000\000\001\025\000\000\000\000\014B\000\000\014R\001\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000\000\000\000\001\t\000\000\000\000\000\000\014J\014b\000\000\001\025\000\000\001\017\000\000\000\000\001\017\000\000\000\000\000\000\000\000\001\025\000\000\000\000\001\t\000\000\001\t\000\000\000\000\000\000\000\000\0142\000\000\001\t\001\t\001\017\001\t\001\t\001\t\001\017\000\000\000\000\000\000\000\000\000\000\014:\000\000\001\025\001\017\001\017\001\025\001\017\001\017\000\000\014J\000\000\000\000\001\017\000\000\001\021\000\000\001\017\001\021\000\000\014B\000\000\014R\001\017\000\000\000\000\001\025\000\000\001\025\000\000\000\000\000\000\000\000\0142\000\000\001\025\001\025\001\021\001\025\001\025\001\025\001\021\000\000\001\017\000\000\001\017\000\000\014:\000\000\000\000\001\021\001\021\000\000\001\021\001\021\001\017\000\000\000\000\000\000\001\021\000\000\000\000\000\000\001\021\000\000\000\000\014B\000\000\014R\001\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\000\000\000\000\001\017\000\000\000\000\000\000\014J\014b\000\000\001\021\000\000\001\029\000\000\000\000\001\029\000\000\000\000\000\000\000\000\001\021\000\000\000\000\001\017\000\000\001\017\000\000\000\000\000\000\000\000\0142\000\000\001\017\001\017\001\029\001\017\001\017\001\017\001\029\000\000\000\000\000\000\000\000\000\000\014:\000\000\001\021\001\029\001\029\001\021\001\029\001\029\000\000\014J\000\000\000\000\001\029\000\000\014*\000\000\014Z\001-\000\000\014B\000\000\014R\001\029\000\000\000\000\001\021\000\000\001\021\000\000\000\000\000\000\000\000\0142\000\000\001\021\001\021\001-\001\021\001\021\001\021\001-\000\000\014b\000\000\001\029\000\000\014:\000\000\000\000\001-\001-\000\000\001-\014\146\001\029\000\000\000\000\000\000\001-\000\000\000\000\000\000\014Z\000\000\000\000\014B\000\000\014R\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014j\000\000\000\000\001\029\000\000\000\000\000\000\014J\014b\000\000\001-\000\000\014*\000\000\000\000\001!\000\000\000\000\000\000\000\000\001-\000\000\000\000\001\029\000\000\001\029\000\000\000\000\000\000\000\000\0142\000\000\001\029\001\029\001!\001\029\001\029\001\029\001!\000\000\000\000\000\000\000\000\000\000\014:\000\000\014j\001!\001!\001-\001!\001!\000\000\014J\000\000\000\000\001!\000\000\014*\000\000\014Z\001)\000\000\014B\000\000\014R\001!\000\000\000\000\001-\000\000\001-\000\000\000\000\000\000\000\000\0142\000\000\001-\001-\001)\014\154\014r\001-\001)\000\000\014b\000\000\001!\000\000\014:\000\000\000\000\001)\001)\000\000\001)\014\146\001!\000\000\000\000\000\000\001)\000\000\000\000\000\000\014Z\000\000\000\000\014B\000\000\014R\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014j\000\000\000\000\001!\000\000\000\000\000\000\014J\014b\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\001!\000\000\001!\000\000\000\000\000\000\000\000\000\000\000\000\001!\001!\000\000\001!\014r\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\142\014j\001\146\000\000\001)\001\150\000\000\000\000\014J\000\000\000\000\000\000\000\000\000\000\008\133\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\001\158\001)\000\000\001)\000\000\000\000\001\174\001\178\000\000\001\186\001)\001)\000\000\001)\014r\001)\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\001\210\001\214\001\218\000\000\001\222\001\226\001\142\001\230\001\146\000\000\000\000\001\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018N\000\000\000\000\001\234\000\000\000\000\001\154\000\000\001\238\001\158\000\000\001\n\000\000\000\000\000\000\001\174\001\178\000\000\001\186\000\000\001\246\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\001\250\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\001\210\001\214\001\218\001\254\001\222\001\226\000\000\001\230\000\000\002\002\020\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\006\000\000\000\000\000\000\020\234\001\234\002\n\000\000\000\000\000\000\001\238\000\000\020\238\001\n\020\242\000\000\000\000\000\000\000\000\020\246\000\000\000\000\001\246\000\000\020\250\000\000\000\000\021\006\000\000\000\000\000\000\021\n\001\250\000\000\000\000\005\205\000\000\021\014\000\000\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\005\205\023.\000\000\002\002\n\137\000\000\021\018\000\000\005\205\000\000\005\205\000\000\002\006\000\000\000\000\005\205\000\000\000\000\002\n\000\000\005\205\000\000\000\000\005\205\000\000\000\000\000\000\005\205\000\000\n\137\000\000\021\022\000\000\005\205\021\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\030\nY\000\000\005\205\000>\021\"\001\n\021&\000\000\021*\021.\000\000\0212\000\000\000\000\000\000\000\000\000\000\0216\000\000\000\000\021:\000\000\000\000\000\000\000\000\nY\000\000\005\205\000\000\000\000\005\205\000\000\000\000\000\000\000\000\021>\000\000\000\000\000\000\021B\021F\n\137\005\205\000\000\000\000\000\000\000\000\005\205\005\205\005\205\000\000\005\205\005\205\000\000\005\205\000\000\001\142\000\000\001\146\000\000\005\205\001\150\000\000\005\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\005\205\001\158\000\000\000\000\005\205\005\205\nY\001\174\007\030\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\001\210\001\214\001\218\000\000\001\222\001\226\001\142\001\230\001\146\000\000\000\000\001\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\234\000\000\000\000\001\154\000\000\001\238\001\158\000\000\001\n\000\000\000\000\000\000\001\174\001\242\000\000\001\186\000\000\001\246\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\001\250\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\001\210\001\214\001\218\001\254\001\222\001\226\000\000\001\230\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\006\000\000\000\000\000\000\000\000\001\234\002\n\000\000\000\000\000\000\001\238\000\000\000\000\001\n\006\006\000\000\000\000\000\000\000\000\0049\000\000\0049\001\246\000\000\0049\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000\000\000\000\0049\000\000\000\000\0049\000\000\001\254\000\000\000\000\000\000\0049\0049\002\002\0049\000\000\000\000\000\000\000\000\000\000\000\000\0049\002\006\0049\000\000\000\000\000\000\000\000\002\n\000\000\000\000\0049\0049\020\230\000\000\0049\0049\0049\000\000\0049\0049\000\000\0049\000\000\000\000\020\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\238\000\000\020\242\000\000\000\000\0049\000\000\020\246\000\000\000\000\0049\000\000\020\250\0049\000\000\021\006\000\000\000\000\000\000\021\n\000\000\000\000\0049\000\000\011\202\021\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022V\000\000\000\000\000\000\000\000\021\018\011\210\000\000\0049\000\000\000\000\000\000\000\000\000\000\0049\000\000\000\000\000\000\000\000\000\000\011\218\000\000\000\000\0049\000\000\000\000\012\026\012\"\n\137\0049\021\022\000\000\000\000\021\026\000\000\000\000\011\250\000\000\000\000\011\226\000\000\011\242\000\000\000\000\000\000\021\030\000\000\000\000\000\000\000\000\021\"\001\n\021&\000\000\021*\021.\020\230\0212\000\000\000\000\000\000\000\000\012\002\0216\000\000\000\000\021:\000\000\020\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\238\000\000\020\242\000\000\000\000\021>\000\000\020\246\000\000\021B\021F\n\137\020\250\000\000\000\000\021\006\000\000\000\000\000\000\021\n\000\000\000\000\000\000\000\000\012\n\021\014\000\000\000\000\000\000\000\000\000\000\011\234\000\000\000\000\000\000\000\000\024V\000\000\000\000\n\181\000\000\021\018\005\205\000\000\005I\005\205\000Z\000\000\000\000\005\205\000\000\005\205\000\000\000\000\000\000\000\000\005\205\005\205\000\000\012*\012\018\000\000\000\000\000\000\n\181\000\000\021\022\000\000\005\205\021\026\005\205\005\205\000\166\005\205\000\230\005\205\000\000\005\205\000\000\005\205\005\205\021\030\005\205\005\205\005\205\005\205\021\"\001\n\021&\000\000\021*\021.\000\000\0212\000\000\000\000\000\000\000\000\000\000\0216\005\205\000\000\021:\000\000\004\006\000\000\005\205\000\000\005\205\000>\005\205\000\000\005\205\000\000\000\000\000\000\000\000\021>\000\000\000\000\005\205\021B\021F\n\181\005\205\005\205\005\205\000\000\005\205\000\000\004\218\000\000\007N\000\000\005\205\000>\000\000\000>\005\205\000\000\005\205\000\000\000\000\000\000\005\205\000\000\005\205\000\000\005\205\000\000\005\205\005\205\005\205\005\205\005\205\000\000\000\000\000\000\000\000\005\205\005\205\000\000\005\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\205\000\000\005\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\205\000\000\005\205\000\000\000\000\005\205\000\000\005\205\000\000\000\000\005\205\000\000\000\000\005\205\005\205\000\000\000\000\005\205\000\000\000\000\000\000\000\000\005\205\005\205\000\000\000\000\000\000\005\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\205\000\000\005\205\005\205\005\205\005\205\005\205\005\205\000\000\005\205\000\000\000\000\005\205\005\205\005\205\005\205\001\142\005\205\001\162\005\205\000\000\001\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\001\158\000\000\000\000\000\000\000\000\000\000\001\170\001\190\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005R\001\206\000\000\000\000\005V\001\214\001\218\000\000\005Z\005^\001\142\005b\001\162\000\000\000\000\001\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005f\000\000\000\000\001\154\000\000\005j\001\158\000\000\001\n\000\000\000\000\000\000\001\170\007\006\000\000\001\186\000\000\005r\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005R\001\206\000\000\000\000\005V\001\214\001\218\005v\005Z\005^\000\000\005b\000\000\005z\000\000\000\000\005\205\000\000\000\000\005\205\003.\000\000\005~\005\205\000\000\005\205\000\000\005f\002\n\000\000\005\205\005\205\005j\005\205\000\000\001\n\005\205\003r\000\000\000\000\005\205\000\000\005\205\000\000\005r\000\000\005\205\005\205\005\205\005\205\003\178\000\000\000\000\005\205\005\205\005\205\000\000\000\000\005\205\000\000\005\205\005\205\000\000\000\000\000\000\000\000\005v\000\000\000\000\000\000\000\000\005\205\005z\000\000\005\205\005\205\000\000\000\000\000\000\000\000\000\000\005~\000\000\000>\005\205\000\000\005\205\002\n\005\205\000\000\000\000\005\205\000\000\000\000\005\205\000\000\000\000\000\000\005\205\005\205\000>\000\000\000\000\005\205\005\205\000\000\000\000\000\000\005\205\000\000\000\000\005\205\000\000\000>\000\000\005\205\005\205\000\000\005\205\000\000\000\000\000\000\000\181\000\000\005\205\005\205\000\000\000\000\005\205\005\205\000\000\000\000\000\000\005\205\000\000\005\205\000\000\000\000\005\205\000\000\011\210\000\000\000\000\000\000\000\000\005\205\000\000\000\000\005\205\000\000\005\205\000\000\000\000\000\000\011\218\000\000\000\000\000\000\005\205\000\000\000\181\000\181\000\000\005\205\005\205\000\000\000\000\005\205\005\205\000\000\011\250\005\205\000\000\011\226\000\000\011\242\005\205\005\205\000\000\000\000\000\000\005\205\000\000\000\000\005\205\005\205\000\000\000\000\005\205\000\000\001\142\000\000\001\162\005\205\005\205\001\166\012\002\005\205\005\205\000\000\000\000\005\205\000\000\000\000\000\000\000\000\005\205\005\205\000\000\000\000\001\154\005\205\000\000\001\158\000\000\000\000\000\000\000\000\000\000\001\170\005n\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\012\n\000\000\000\000\000\000\000\000\005R\001\206\011\234\000\000\005V\001\214\001\218\000\000\005Z\005^\000\000\005b\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005f\000\000\000\000\000\181\012\018\005j\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005v\000\000\000\000\000\000\000\000\000\000\005z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005~\000\000\0006\000:\000J\000\142\002\n\000\146\n:\000\150\000\218\n>\000\226\000\000\000\242\024\214\000\250\nB\001\002\001\026\001\"\001&\nF\024\218\000\000\000\000\000\000\000\000\001\142\000\000\n\142\000\000\000\000\n\146\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\150\n\162\000\000\000\000\000\000\000\000\000\000\000\000\001F\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\182\001\206\001J\000\000\n\186\001\214\001\218\000\000\n\190\n\194\001\142\n\198\n\142\000\000\000\000\n\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\n\206\000\000\000\000\001\154\000\000\n\210\000\000\000\000\001\n\000\000\000\000\000\000\n\150\n\214\000\000\000\000\001\n\n\218\000\000\000\000\000\000\004\137\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\182\001\206\000\000\000\000\n\186\001\214\001\218\n\222\n\190\n\194\001\142\n\198\n\142\n\226\000\000\n\146\000\000\000\000\000\000\000\000\000\000\000\000\n\230\000\000\000\000\000\000\n\202\n\206\002\n\000\000\001\154\000\000\n\210\000\000\000\000\001\n\000\000\000\000\000\000\n\150\n\238\000\000\000\000\000\000\n\218\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\182\001\206\000\000\000\000\n\186\001\214\001\218\n\222\n\190\n\194\001\142\n\198\013F\n\226\000\000\013J\000\000\000\000\000\000\000\000\000\000\000\000\n\230\000\000\000\000\000\000\n\202\n\206\002\n\000\000\001\154\000\000\n\210\000\000\000\000\001\n\000\000\000\000\000\000\013N\014\162\000\000\000\000\000\000\n\218\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013f\001\206\000\000\000\000\013j\001\214\001\218\n\222\013n\013r\001\142\013v\013F\n\226\000\000\013J\000\000\000\000\000\000\000\000\000\000\000\000\n\230\000\000\000\000\000\000\n\202\013z\002\n\000\000\001\154\000\000\013~\000\000\000\000\001\n\000\000\000\000\000\000\013N\013R\000\000\000\000\000\000\013\134\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013f\001\206\000\000\000\000\013j\001\214\001\218\013\138\013n\013r\001\142\013v\013F\013\142\000\000\013J\000\000\000\000\000\000\000\000\000\000\000\000\013\146\000\000\000\000\000\000\n\202\013z\002\n\000\000\001\154\000\000\013~\000\000\000\000\001\n\000\000\000\000\000\000\013N\013\130\000\000\000\000\000\000\013\134\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013f\001\206\000\000\000\000\013j\001\214\001\218\013\138\013n\013r\000\000\013v\000\000\013\142\000\000\000\000\000\000\000\000\008}\000\000\000\000\000\000\013\146\000\000\000\000\000\000\n\202\013z\002\n\000\000\008}\000\000\013~\000\000\000\000\001\n\000\000\000\000\008}\000\000\008}\000\000\000\000\000\000\013\134\008}\000\000\000\000\000\000\000\000\008}\000\000\000\000\008}\000\000\000\000\023*\008}\021\178\000\000\000\000\000\000\000\000\008}\000\000\000\000\013\138\000\000\020\234\000\000\000\000\000\000\013\142\000\000\000\000\000\000\020\238\000\000\020\242\008}\000\000\013\146\000\000\020\246\000\000\000\000\000\000\002\n\020\250\000\000\000\000\021\006\000\000\000\000\000\000\021\n\000\000\000\000\000\000\000\000\000\000\021\014\000\000\000\000\008}\000\000\000\000\008}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\018\023J\008}\000\000\000\000\000\000\000\000\008}\008}\008}\000\000\008}\008}\000\000\008}\000\000\000\000\000\000\000\000\000\000\008}\000\000\000\000\008}\000\000\021\022\000\000\000\000\021\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008}\000\000\021\030\000\000\008}\008}\000\000\021\"\001\n\021&\000\000\021*\021.\007\241\0212\000\000\000\000\000\000\000\000\000\000\0216\000\000\000\000\021:\000\000\007\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\241\000\000\007\241\000\000\000\000\021>\000\000\007\241\000\000\021B\021F\000\000\007\241\000\000\000\000\007\241\000\000\022:\000\000\007\241\000\000\000\000\000\000\000\000\000\000\007\241\000\000\000\000\000\000\020\234\000\000\n:\000\000\000\000\n>\000\000\000\000\020\238\024\234\020\242\nB\007\241\023J\000\000\020\246\nF\024\238\000\000\000\000\020\250\000\000\000\000\021\006\000\000\000\000\000\000\021\n\000\000\000\000\000\000\000\000\000\000\021\014\000\000\000\000\000\000\007\241\000\000\000\000\007\241\000\000\000\000\000\000\016n\000\000\000\000\000\000\000\000\021\018\000\000\000\000\007\241\000\000\000\000\000\000\000\000\007\241\007\241\007\241\016r\007\241\007\241\000\000\007\241\000\000\000\000\000\000\000\000\000\000\007\241\000\000\000\000\007\241\021\022\000\000\000\000\021\026\000\000\000\000\001\206\000\000\000\000\000\000\012\202\001\218\000\000\000\000\007\241\021\030\000\000\000\000\007\241\007\241\021\"\001\n\021&\000\000\021*\021.\022R\0212\000\000\000\000\000\000\000\000\000\000\0216\000\000\000\000\021:\000\000\020\234\000\000\001\n\000\000\000\000\000\000\000\000\004\157\020\238\000\000\020\242\000\000\000\000\021>\000\000\020\246\000\000\021B\021F\000\000\020\250\000\000\000\000\021\006\000\000\020\230\000\000\021\n\000\000\000\000\000\000\000\000\000\000\021\014\000\000\000\000\000\000\020\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\238\000\000\020\242\000\000\021\018\008\217\008\217\020\246\000\000\000\000\008\217\000\000\020\250\000\000\000\000\021\006\000\000\000\000\000\000\021\n\000\000\000\000\000\000\000\000\000\000\021\014\000\000\000\000\000\000\021\022\000\000\000\000\021\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\238\000\000\000\000\021\030\000\000\000\000\000\000\000\000\021\"\001\n\021&\000\000\021*\021.\000\000\0212\000\000\000\000\000\000\000\000\000\000\0216\000\000\000\000\021:\021\022\000\000\000\000\021\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021>\021\030\000\000\000\000\021B\021F\021\"\001\n\021&\000\000\021*\021.\020\230\0212\000\000\000\000\000\000\000\000\000\000\0216\000\000\000\000\021:\000\000\020\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\238\000\000\020\242\000\000\000\000\021>\000\000\020\246\000\000\021B\021F\000\000\020\250\000\000\000\000\021\006\000\000\000\000\000\000\021\n\000\000\000\000\000\000\000\000\000\000\021\014\000\000\000\000\000\000\000\000\000\000\000\000\004I\004I\004I\004I\000\000\004I\000\000\004I\004I\023\238\004I\000\000\004I\000\000\004I\000\000\004I\004I\004I\004I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\000\000\004I\000\000\021\022\000\000\000\000\021\026\000\000\000\000\000\000\000\000\000\000\004I\000\000\000\000\000\000\000\000\000\000\021\030\000\000\000\000\000\000\000\000\021\"\001\n\021&\000\000\021*\021.\000\000\0212\000\000\004I\000\000\000\000\000\000\0216\000\000\004I\021:\000\000\000\000\000\000\000\000\000\000\000\000\004I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021>\000\000\000\000\000\000\021B\021F\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\0006\000:\000J\000\142\000\000\000\146\004I\000\150\000\218\000\000\000\226\001.\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\0016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001F\0016\000\000\000\000\000\000\000\000\001R\004I\000\000\000\000\000\000\000\000\000\000\000\000\001J\000\000\000\000\000\000\000\000\000\000\000\000\001F\000\000\000\000\000\000\000\000\000\000\001R\000\000\0006\000:\000J\000\142\000\000\000\146\001J\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\001\153\000\000\000\000\001\153\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\000\000\001\153\0016\000\000\001V\000\000\001\n\000\000\000\000\000\000\000\000\001\153\000\000\000\000\000\000\001\153\000\000\001\153\001\153\000\000\000\000\000\000\001F\000\000\000\000\001V\000\000\001\153\012\021\000\000\001\153\000\000\001\153\000\000\000\000\000\000\001J\000\000\000\000\000\000\004:\004>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002-\000\000\000\000\000\000\001\153\000\000\000\000\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\001\153\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001\153\005\226\000\000\001\153\000\000\004B\000\000\001\153\0016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\153\003Q\000\000\001F\000\000\000\000\005\234\000\000\000\000\001R\001\153\001\153\001\153\000\000\000\000\000\000\000\000\001J\000\000\000\000\000\000\025\146\004>\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\000\000\000\000\0006\000:\000J\000\142\000\000\000\146\025\150\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\001F\001\002\001\026\001\"\001&\006:\000\000\000\000\006\138\000\000\000\000\000\000\003I\000\000\001J\002%\000\000\001.\004:\004>\000\000\000\000\000\000\006B\000\000\000\000\000\000\002\013\0016\000\000\000\000\000\000\000\237\000\000\000\000\000\237\000\000\006J\000\000\000\000\000\000\002\013\000\000\006\154\006\162\000\000\000\000\000\000\001F\000\000\006B\000\000\000\000\006j\000\237\000\000\006R\000\000\006b\000\000\000\000\000\000\001J\000\000\006J\000\000\025\146\004>\000\237\000\000\000\237\000\237\000\000\000\000\004J\000\213\000\000\000\000\000\213\006r\006j\000\000\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\000\002\013\000\000\000\213\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006r\006J\000\000\000\000\000\000\000\213\000\000\000\213\000\213\000\000\000\000\006z\000\237\000\000\002\013\000\000\025\158\000\213\006Z\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\013\000\000\006z\000\000\000\000\000\237\000\000\000\213\000\000\006Z\006\170\006\130\002\013\000\000\000\000\000\000\000\000\000\000\000\205\000\213\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\205\000\237\006\130\000\237\000\205\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\213\000\000\000\205\000\000\006Z\000\000\000\205\000\000\000\205\000\205\000\000\000\000\000\000\000\209\000\000\000\000\000\209\000\000\000\205\000\000\000\000\006R\000\213\000\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\213\000\213\000\213\000\209\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\225\000\205\000\209\000\000\000\000\000\000\000\209\000\000\000\209\000\209\000\000\000\000\000\000\000\205\000\000\006B\000\000\000\000\000\209\000\225\000\000\006R\000\000\000\209\000\000\000\000\000\000\000\000\000\000\006J\000\000\000\000\000\000\000\225\000\000\000\225\000\225\000\000\000\000\000\205\000\000\000\000\000\205\000\000\000\209\000\225\006Z\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\217\000\209\000\000\000\217\000\000\000\000\000\000\000\000\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\000\006r\000\000\006B\000\205\000\205\000\205\000\217\000\000\000\000\000\000\000\000\000\209\000\225\000\000\000\209\000\000\006J\000\000\006Z\000\000\000\217\000\000\000\217\000\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\006R\000\209\006b\000\225\000\000\000\000\000\225\000\000\000\000\000\000\006Z\000\209\000\209\000\209\000\221\000\000\000\000\000\221\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\000\006B\000\000\000\000\000\217\000\221\000\000\000\225\000\225\000\225\000\229\000\000\000\000\000\229\000\000\006J\000\000\000\000\000\000\000\221\000\000\000\221\000\221\000\000\000\000\000\000\000\000\000\000\006B\000\000\000\217\000\221\000\229\000\217\006R\000\000\006b\006Z\000\000\000\000\000\000\000\000\006J\000\000\000\000\000\000\000\229\000\000\000\229\000\229\000\000\000\000\000\000\006:\000\000\000\217\000\245\006r\006j\000\000\000\000\006R\000\000\006b\000\000\000\217\000\217\000\217\000\000\000\221\000\000\006B\000\000\000\000\000\000\000\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006r\006J\000\000\000\000\000\000\000\245\000\000\000\245\006\162\000\000\000\000\000\221\000\229\000\000\000\221\000\000\000\000\006j\006Z\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\006z\000\000\000\000\000\229\000\000\006r\000\000\006Z\000\221\000\221\000\221\000\000\000\000\000\000\000\000\000\000\006:\000\245\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006B\000\229\000\229\000\229\000\233\000\000\000\000\000\000\000\000\006z\000\000\000\000\000\245\000\000\006J\000\000\006Z\000\000\000\233\000\000\000\233\000\233\000\000\000\000\000\000\006:\000\000\000\000\000\241\000\000\006j\000\000\000\000\006R\000\245\006b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006B\006\170\006\130\000\245\000\241\000\000\000\000\000\000\000\000\000\157\000\000\000\000\000\000\006r\006J\000\000\000\000\000\000\000\241\000\000\000\241\006\162\000\000\000\000\000\000\000\233\000\000\000\157\000\000\000\000\006j\000\149\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\000\011\218\000\000\000\000\000\000\000\000\000\000\000\157\000\157\000\149\000\000\006z\000\000\000\000\000\233\000\000\006r\000\157\006Z\000\000\011\226\000\000\011\242\000\149\000\000\000\000\000\000\000\000\000\241\000\149\000\149\000\000\000\153\000\000\000\000\000\000\000\233\000\000\000\000\000\149\000\000\000\000\011\226\000\157\000\149\000\000\000\233\006\130\000\233\000\000\000\153\000\000\000\000\000\000\006z\000\000\000\000\000\241\000\000\000\000\000\000\006Z\000\000\000\000\000\153\000\149\000\000\000\000\000\000\000\000\000\153\000\153\000\000\000\000\000\000\000\000\000\169\000\000\000\000\000\241\000\153\000\157\000\000\011\226\000\000\000\153\000\000\000\000\011\234\000\241\006\130\000\241\000\000\000\000\011\210\000\000\000\000\000\000\000\000\000\000\000\000\000\157\000\000\000\149\000\000\000\000\000\153\000\000\011\218\000\000\011\234\000\000\000\000\000\000\000\169\000\169\000\157\000\157\000\000\000\000\000\000\000\000\000\161\000\149\000\169\000\000\000\000\011\226\000\000\011\242\000\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\149\011\210\000\000\000\000\000\000\000\153\000\000\000\000\000\000\011\210\000\000\012\002\011\234\000\000\000\000\011\218\000\000\000\000\000\000\000\000\000\000\000\161\000\161\011\218\000\000\000\153\000\000\000\000\000\000\000\165\000\165\000\161\000\000\000\000\011\226\000\173\011\242\000\000\000\000\000\165\000\153\000\153\011\226\011\202\011\242\000\000\000\000\000\000\000\000\000\169\000\000\000\000\000\000\011\210\000\000\000\000\011\234\000\161\000\000\000\000\011\202\011\210\000\000\000\000\000\000\012\002\000\000\011\218\000\000\000\169\000\000\000\000\000\000\000\173\000\173\011\218\000\000\000\000\011\210\000\000\000\000\000\189\012\"\011\250\000\169\000\169\011\226\000\000\011\242\000\000\000\000\011\250\011\218\000\000\011\226\000\161\011\242\000\000\000\177\000\177\000\000\000\000\011\234\000\165\000\000\000\000\000\000\000\000\011\250\012\002\011\234\011\226\000\000\011\242\000\000\000\161\000\000\012\002\000\000\000\000\000\000\000\000\000\000\000\165\000\000\011\202\000\000\000\000\000\000\000\000\000\161\000\161\000\000\000\000\012\002\000\000\000\000\000\000\000\165\000\165\000\000\000\000\000\000\011\210\000\000\000\000\000\000\012\n\000\000\000\000\000\000\000\000\000\000\000\000\011\234\012\n\000\000\011\218\000\000\000\000\000\000\000\000\011\234\000\185\012\"\000\000\000\000\000\173\000\000\000\000\000\000\000\000\012\n\011\250\000\000\000\189\011\226\000\000\011\242\011\234\000\000\000\000\000\173\000\173\000\000\000\000\000\000\000\000\000\000\000\000\012*\012\018\000\177\000\000\000\000\000\000\000\000\000\000\000\000\012\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\012\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\n\000\000\000\000\000\000\000\000\000\000\000\000\011\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185\012\018")) + ((16, "\000\226\000\201\000\000\000\000\000\220\000\201\000\000\000\000\000\000\000\000\000\000\000\000\000]\000\000\000\000\000\000\000\226\000\000\001\146.\160\000\000\018\174\018\174\000\000\000\000*\236\018\174\000\000;*\018\174\000\000\000\000\018\174\000\000\018\174\000\000\000W\000X\018\174\000\000\018\174\000\000\000\000\000\000+R\018\174\000\000;\158\018\174\000\000\000\000\018\174\000\000\018\174\000\000\000:\000\152\018\174\000\000\018\174\000\000\018\174\000\000;\172\018\174\000\000\000\000\018\174\000\000\018\174\000\000\000c\000\000\000\000\018\174\000\000\018\174\000\000\000\000\018\174\000\000\018\174\000\000\000\188\000\232\018\174\000\000.\160;^?\140\000\000G\028\001d.\160\000F?\140\000\000\000\218\018\174\000\000Gb\000\000\000c\002\154.\128\000\000\000\00094\000\000\144.\128\000\000>\144\000\000>\1447\170\008`7\170\008f.\128\007\142\021\160\021\160\002r\001P\002\220\000\000\000\000\000\000\001P\000\000\002\174\002r\000\000\000\000\007\152\000\000\000\000\000\000\008v\000\000\008~\000\000\000\000\008\184\008p.\128\007\182\008\150\000\000\008z\020\012\007\192\021\160\000\000\000\000\007\234\000\000\000\015\000\000\005v\000\000\001\\\000\000\008<\000\000\012L\000M\000\000\012L\000\000\000\000\024\216\000\000\005f\000\000\000\000\t\144\000\000\012L\000\000\008\130\020\012\007\200\008\166\000\000\000%\000\000\008v\000c\007\214\008\156G\212\007\234\0028\000\000.\128\008\200\000\000\008\170G\212\007\254\008\220\000\000\005`.\128\008\222\000\000\008\224\000\000\018\012\000c\005r.\128\008\226\000\000\008\230\000\000\000\000\000\000\t\144\000\000\000\000\001(\000\000\006\212\000\000\000%\000\000\000\000\003\222\022\140\000\000\003\222\000\000\000\000\008\014\000\000\0012\000\003\021\160\000\000\004\024\000M\004\024\000\000\000\015\000\000\006\212\000\000\006\212\000\000\000\000\000\000\008\n\000\000\000\000\008\028\000\000\004$\005v\004\014\004\024\000\000\000\000\000\000\006\154\000\000\006\212\000\000\004$\000\000\000\000\007\230\000\015\016f\000\000\000\015\000\000\0082\016f\000\000\000\000\0082\000\000\000\000\008\028\000\000\000\000\008$\000\000\004L\006\212\000\000\004L\000\000\000\000\008\158\000\000\001(\000\000\006\212\000\000\000\000\000\000\017\1848 \000\000\t\004\000\000\017\184\t\006\000\000\t\n\000\000.\160\000c\004(\000\000.\128\t\012\000\000\001\028\008\220\000c\0086\008\244G\212\008<\004\210\000\000.\128\t\028\000\000\004\246\000\000.\128\t\030\000\000\018\012\000c\005h\000\000.\128\t\"\000\000\004\178\017\184\000\000\024\216\005t\000\000.\128\t$\000\000\000\000\000\000\001\246\000\000\t \020\012\008x\tV\000\000\005\212\000\000\t&\000c\008~\t\n\201\011i\011i\004\222\006\017\006\017\006\129\016\"\006y\006y\016\"\002\206\006y\006y\006y\006y\006\001\006y\008\246\006y\011\170\004\013\006y\001\"\0192\006y\006y\000N\007\182\020N\020v\020\158\020\174\020\214\023\142\006I\012i\012i\001\"\006y\021v\012i\000\n\006y\006y\006y\006y\015\142\006y\006\246\006y\006\t\006\222\000\n\006y\006y\006y\016\166\0206\n\201\006y\006y\006\145\006y\006\145\006y\006y\006\145\000\n\006y\006y\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\006\145\004~\006\145\024\239\024\243\006\145\021z\027\002\024\247\006\145\024\182\006\145\006\145\021~\005\217\021\230\006\145\006\145\006\145\006\145\006\145\006\145\n*\006\145\006\145\006\145\004\013\006\145\006\145\0061\006\145\004\013\004\013\001\162\001\"\003\026\006\145\023\134\006A\006\145\006\169\006I\001\"\004\013\027\002\006\145\006\145\006\145\006\145\003f\006\145\006\145\016\170\004v\006\145\006\145\024\182\006\145\021\138\006\145\006\145\006\145\006\161\006\145\000\n\006\145\006\145\006\145\004\013\006\145\006\145\006\145\000\n\006\145\006\145\006\145\006\145\001\"\021\018\nR\004}\006\145\nV\015\138\003j\006\145\025\018\001\"\nZ\003\170\003\174\006\145\006\145\n^\025\022\006\145\006\145\006\145\006\145\006\169\006\145\005\217\006\145\021\234\003\233\006\145\006\145\000\n\006\145\006\145\026'\011Q\003:\004\t\003B\004\014\003R\000\n\026+\006\145\005\217\006\161\006\145\003Z\005\217\011Q\006\145\006\145\026.\006\145\015\170\006\145\011\161\006\145\003\237\021\246\015\146\006\145\022\206\022\214\022\206\022\214\011a\0035\006\145\004\t\006\145\0035\006\145\006\145\003b\011A\006\145\006\145\000R\000V\000f\000\170\007\186\000\174\nR\000\178\000\246\nV\000\254\0272\001\014\024\254\001\022\nZ\001\030\0012\001:\001>\n^\025\002\022\222\004}\023\210\004\018\nb\027f\004}\004}\003r\004&\003~\001F\003\134\005\t\003\150\001\166\nr\013^\004}\004}\013b\003\158\013\002\004\157\001N\008\137\014\202\008\129\0176\004\237\004B\019\230\005\t\014\218\004\t\001\178\013\"\018\146\0256\004\t\004\t\012\158\015\014\004}\015\"\013j\025b\025n\003\166\015&\017f\004\t\004\209\020V\001\218\012\158\001\222\004\173\001b\016\030\015.\011\153\008\218\017\170\013~\001\230\0152\004\t\013\130\011\138\001\242\020~\013\134\013\138\n\134\013\142\004\t\007\202\027:\007\210\0156\007\226\003\182\018*\008\137\022\158\008\129\027B\007\234\023\138\n\226\013\146\011I\016\022\015:\015>\013\150\015B\027:\000\n\005\t\015V\014\218\004J\004\137\026G\026K\015b\013\158\006i\026O\015\014\008\014\016\"\008\022\007\242\008&\020^\025\130\005\t\021\218\015\130\018\194\008.\018\150\015\134\015\194\004\173\n\138\004N\013\162\023\142\015\198\004\209\019\006\020\134\013\166\004\173\004\173\000\n\018\214\011q\004\173\015\206\006Q\013\170\004z\006\153\006\153\008\002\0086\002\"\006\153\000R\000V\000f\000\170\007\186\000\174\nR\000\178\000\246\nV\000\254\006Y\001\014\024\254\001\022\nZ\001\030\0012\001:\001>\n^\025\002\011Q\026g\026k\023\158\nb\006)\026o\016\"\011\129\008F\011Y\001F\004\130\005\005\020\182\001\166\nr\013^\011Q\004\154\013b\016\022\018\242\0069\001N\0222\014\202\011Q\019\022\004\233\014\218\022\226\005\005\019n\018\198\001\178\008\165\008\165\014\218\015\014\006a\008\165\019\130\011\145\015\"\013j\025b\015\014\019\158\015&\017\174\t.\018\218\t6\001\218\tF\001\222\004\189\001b\016\030\015.\023\214\tN\011y\013~\001\230\0152\022\194\013\130\011\138\001\242\012i\013\134\013\138\n\134\013\142\019N\004\162\020\190\025\194\0156\000\n\025\238\005\233\004\166\004\174\003Y\013>\004\198\tV\n\226\013\146\019R\004\202\015:\015>\013\150\015B\004\210\000\n\005\005\015V\023z\004\230\004\137\016\206\012\158\015b\013\158\018\246\016\"\000\n\001\230\004\250\016\238\019\026\012\226\001\242\016\"\005\005\019r\015\130\023\198\tf\012\158\015\134\015\194\005\014\n\138\019\134\013\162\005.\015\198\012\158\005R\019\162\013\166\005^\004\189\012i\012i\006!\005f\015\206\012i\013\170\000\n\006\177\006\177\004\017\005\186\002\"\006\177\000R\000V\000f\000\170\007\186\000\174\nR\000\178\000\246\nV\000\254\005\198\001\014\024\254\001\022\nZ\001\030\0012\001:\001>\n^\025\002\016\022\006\018\006\"\006*\nb\006\170\0272\006\206\025\214\014\218\tr\001F\tz\006\214\t\138\001\166\nr\013^\015\014\007\014\013b\t\146\007\026\007&\001N\027\n\014\202\0072\004\209\007>\007J\007^\001\"\007n\007~\001\178\007\134\007\171\014\218\007\246\007\250\008:\008>\008\158\015\n\013j\027\014\015\014\t\154\015&\008\162\008\178\008\194\027\018\001\218\008\238\001\222\004\217\001b\015*\015.\008\254\000\n\t\018\013~\001\230\0152\tZ\013\130\011\138\001\242\004\017\013\134\013\138\n\134\013\142\004\017\004\017\t^\012q\0156\t\158\t\170\t\162\n\002\n\006\n\026\n2\004\017\016\"\n\226\013\146\nF\nf\015:\015>\013\150\015B\0035\000\n\nn\015V\0035\nv\004\137\n~\n\130\015b\013\158\004\209\n\182\n\194\n\202\004\017\027\026\027:\011\014\011.\016\"\011:\011~\015\130\011\150\011\162\011\190\015\134\015\194\004\217\n\138\011\202\013\162\012R\015\198\012Z\012j\012v\013\166\004\217\004\217\012\146\012\154\012\174\004\217\015\206\012\186\013\170\027\"\008\173\008\173\012\194\012\198\002\"\008\173\000R\000V\000f\000\170\007\186\000\174\nR\000\178\000\246\nV\000\254\012\206\001\014\016\134\001\022\nZ\001\030\0012\001:\001>\n^\012\222\012\238\012\246\012\250\013\n\nb\013\018\013*\016\138\0132\004}\013F\001F\013N\013Z\013r\001\166\nr\013^\013z\006\246\013b\013\206\013\218\026\246\001N\007\189\014\202\001\230\014\"\014\154\014\194\012\226\001\242\014\214\014\226\001\178\006\137\014\234\014\218\007\189\014\242\006\137\006\137\014\250\015\n\013j\015F\015\014\015N\015&\015^\015f\015n\027\142\001\218\015v\001\222\015~\001b\015*\015.\000\n\015\186\015\202\013~\001\230\0152\015\210\013\130\011\138\001\242\015\222\013\134\013\138\n\134\013\142\015\226\015\234\006\137\015\238\0156\015\246\015\254\016\014\016.\016r\016z\016~\016\142\007\189\n\226\013\146\027R\016\150\015:\015>\013\150\015B\016\154\000\n\006A\015V\027b\016\162\016\178\016\186\004}\015b\013\158\027\186\027f\004}\004}\016\194\016\198\016\214\016\222\016\246\016\"\016\254\017N\015\130\017\150\004}\004}\015\134\015\194\017\162\n\138\018\022\013\162\018\"\015\198\018B\018n\018z\013\166\018\130\018\158\018\170\007\189\018\178\018\182\015\206\018\190\013\170\018\206\018\226\004}\018\254\019\"\002\"\007\189\000R\000V\000f\000\170\007\186\000\174\nR\000\178\000\246\nV\000\254\019:\001\014\019N\001\022\nZ\001\030\0012\001:\001>\n^\019B\019F\019V\019^\019b\nb\019j\019z\019R\019\142\019\170\019\190\001F\019\206\019\222\019\246\001\166\nr\013^\020\006\006\246\013b\020\018\020C\020k\001N\020\147\014\202\001\230\020\171\020\203\020\227\012\226\001\242\020\250\021\022\001\178\021\130\021\171\014\218\022\002\022\023\022?\022K\022[\015\n\013j\022c\015\014\022v\015&\022\127\022\135\022\143\022\170\001\218\022\210\001\222\022\218\001b\015*\015.\000\n\022\234\011\226\013~\001\230\0152\023\007\013\130\011\138\001\242\023\023\013\134\013\138\n\134\013\142\023\031\023+\0237\012q\0156\023C\023V\023_\011\234\023g\023\170\023\222\023\251\024\003\n\226\013\146\024\015\024\031\015:\015>\013\150\015B\011\242\000\n\006A\015V\024'\0242\0122\012:\0246\015b\013\158\024G\024O\024V\024c\024o\012\018\024w\024\130\011\250\016\"\012\n\024\139\015\130\024\147\024\159\024\186\015\134\015\194\025B\n\138\025j\013\162\025z\015\198\025\174\025\182\025\218\013\166\025\254\026\002\026\n\012\026\0263\026\250\015\206\027\006\013\170\027\022\012q\012q\027\030\027&\002\"\012q\000R\000V\000f\000\170\007\186\000\174\nR\000\178\000\246\nV\000\254\027O\001\014\024\254\001\022\nZ\001\030\0012\001:\001>\n^\025\002\027V\027_\027j\012\"\nb\027z\027\175\027\190\027\199\027\235\012\002\001F\028\007\028\022\028\026\001\166\nr\013^\028\030\028'\013b\000\000\000\000\005M\001N\000\000\014\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\178\000\000\000\000\012B\012*\000\000\000\000\000\000\000\000\015\"\013j\000\000\000\000\000\000\015&\026~\000\000\000\000\000\000\001\218\000\000\001\222\000\000\001b\016\030\015.\000\000\000\000\000\000\013~\001\230\0152\000\000\013\130\011\138\001\242\000\000\013\134\013\138\n\134\013\142\000\000\000\000\000\000\000\000\0156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\226\013\146\000\000\000\000\015:\015>\013\150\015B\000\000\000\n\000\000\015V\000\000\nR\004\137\000\000\nV\015b\013\158\000\000\025\018\000\000\nZ\000\000\000\000\000\000\000\000\n^\025\022\000\000\000\000\015\130\000\000\000\000\000\000\015\134\015\194\000\000\n\138\000\000\013\162\000\000\015\198\000\000\000\000\000\000\013\166\000\000\000\000\000\000\000\000\000\000\000\000\015\206\000\000\013\170\000\000\008\145\008\145\000\000\000\000\002\"\008\145\000R\000V\000f\000\170\007\186\000\174\nR\000\178\000\246\nV\000\254\012\182\001\014\000\000\001\022\nZ\001\030\0012\001:\001>\n^\000\000\000\000\000\000\000\000\000\000\nb\000\000\000\000\000\000\000\000\001\230\000\000\001F\000\000\012\226\001\242\001\166\nr\013^\000\000\000\000\013b\000\000\000\000\000\000\001N\000\000\014\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\015\"\013j\000\000\000\000\004\157\015&\0166\000\000\000\000\000\000\001\218\000\000\001\222\000\000\001b\016\030\015.\000\000\000\000\000\181\013~\001\230\0152\000\000\013\130\011\138\001\242\000\000\013\134\013\138\n\134\013\142\000\000\000\000\000\000\012M\0156\000\000\000\000\000\000\011\234\000\000\000\000\000\000\000\000\000\000\n\226\013\146\000\000\000\000\015:\015>\013\150\015B\011\242\000\n\000\000\015V\000\000\000\000\000\181\000\181\000\000\015b\013\158\000\000\000\000\000\000\000\000\000\000\012\018\000\000\000\000\011\250\000\000\012\n\000\000\015\130\000\000\000\000\000\000\015\134\015\194\000\000\n\138\000\000\013\162\000\000\015\198\000\000\000\000\000\000\013\166\000\000\000\000\000\000\012\026\000\000\000\000\015\206\000\000\013\170\000\000\012M\012M\000\000\000\000\002\"\012M\000R\000V\000f\000\170\007\186\000\174\nR\000\178\000\246\nV\000\254\000\000\001\014\000\000\001\022\nZ\001\030\0012\001:\001>\n^\000\000\000\000\000\000\000\000\012\"\nb\000\000\000\000\000\000\000\000\000\000\012\002\001F\000\000\000\000\000\000\001\166\nr\013^\000\000\000\000\013b\000\000\000\000\000\181\001N\000\000\014\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\178\000\000\000\000\000\181\012*\000\000\000\000\000\000\000\000\015\"\013j\000\000\000\000\000\000\015&\025F\000\000\000\000\000\000\001\218\000\000\001\222\000\000\001b\016\030\015.\000\000\000\000\000\157\013~\001\230\0152\000\000\013\130\011\138\001\242\000\000\013\134\013\138\n\134\013\142\000\000\000\000\000\000\000\000\0156\000\000\000\000\000\000\000\157\000\000\000\000\000\000\000\000\000\000\n\226\013\146\000\000\000\000\015:\015>\013\150\015B\011\242\000\n\000\000\015V\000\000\000\000\000\157\000\157\000\000\015b\013\158\000\000\000\000\000\000\000\000\000\000\000\157\000\000\000\000\011\250\000\000\012\n\000\000\015\130\000\000\000\000\000\000\015\134\015\194\000\000\n\138\000\000\013\162\000\000\015\198\000\000\000\000\000\000\013\166\000\000\000\000\000\000\000\157\000\000\000\000\015\206\000\000\013\170\000\000\012\153\012\153\000\000\000\000\002\"\012\153\000R\000V\000f\000\170\007\186\000\174\nR\000\178\000\246\nV\000\254\000\000\001\014\000\000\001\022\nZ\001\030\0012\001:\001>\n^\000\000\000\000\000\000\000\000\000\157\nb\000\000\000\000\000\000\000\000\000\000\012\002\001F\000\000\000\000\000\000\001\166\nr\013^\000\000\000\000\013b\000\000\000\000\000\157\001N\000\000\014\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\178\000\000\000\000\000\157\000\157\000\000\000\000\000\000\000\000\015\"\013j\000\000\000\000\000\000\015&\025F\000\000\000\000\000\000\001\218\000\000\001\222\000\000\001b\016\030\015.\000\000\000\000\000\149\013~\001\230\0152\000\000\013\130\011\138\001\242\000\000\013\134\013\138\n\134\013\142\000\000\000\000\000\000\000\000\0156\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\000\n\226\013\146\000\000\000\000\015:\015>\013\150\015B\000\149\000\n\000\000\015V\000\000\000\000\000\149\000\149\000\000\015b\013\158\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\011\250\000\000\000\149\000\000\015\130\000\000\000\000\000\000\015\134\015\194\000\000\n\138\000\000\013\162\000\000\015\198\000\000\000\000\000\000\013\166\000\000\000\000\000\000\000\149\000\000\000\000\015\206\000\000\013\170\000\000\012\149\012\149\000\000\000\000\002\"\012\149\000R\000V\000f\000\170\007\186\000\174\nR\000\178\000\246\nV\000\254\000\000\001\014\000\000\001\022\nZ\001\030\0012\001:\001>\n^\000\000\000\000\000\000\000\000\000\149\nb\000\000\000\000\000\000\000\000\000\000\012\002\001F\000\000\000\000\000\000\001\166\nr\013^\000\000\000\000\013b\000\000\000\000\000\149\001N\000\000\014\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\178\000\000\000\000\000\149\000\149\000\000\000\000\000\000\000\000\015\"\013j\000\000\000\000\000\000\015&\017\226\000\000\000\000\000\000\001\218\000\000\001\222\000\000\001b\016\030\015.\000\000\000\000\000\000\013~\001\230\0152\000\000\013\130\011\138\001\242\000\000\013\134\013\138\n\134\013\142\000\000\000\000\000\000\000\000\0156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\226\013\146\000\000\000\000\015:\015>\013\150\015B\000\000\000\n\000\000\015V\000\000\000\000\000\000\000\000\000\000\015b\013\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\130\000\000\000\000\000\000\015\134\015\194\000\000\n\138\000\000\013\162\000\000\015\198\000\000\000\000\000\000\013\166\000\000\000\000\000\000\000\000\000\000\000\000\015\206\000\000\013\170\000\000\000R\000V\000f\000\170\002\"\000\174\nR\000\178\000\246\nV\000\254\000\000\001\014\000\000\001\022\nZ\001\030\0012\001:\001>\n^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001F\000\000\000\000\000\000\001\166\000\000\013^\000\000\000\000\013b\003.\0036\000\170\001N\000\174\018b\003z\003\190\000\000\003\198\000\000\003\214\000\000\003\222\001\178\003\230\003\242\000\000\003\250\000\000\000\000\000\000\000\000\018r\013j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\002\001\218\000\000\001\222\000\000\001b\000\000\000\000\000\000\000\000\000\000\013~\001\230\004\n\000\000\013\130\001\238\001\242\000\000\013\134\013\138\n\134\013\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\226\013\146\000\000\000\000\000\000\000\000\013\150\000\000\000\000\000\n\004\026\000\000\000\000\007\214\005\209\000\000\000\000\005\209\013\158\000\000\005\209\008\026\005\209\008Z\005\209\000\000\005\209\000\000\t:\005\209\000\000\005\209\005\209\000\000\005\209\005\209\005\209\005\209\n\138\000\000\013\162\005\209\018v\005\209\005\209\005\209\013\166\005\209\000\000\005\209\005\209\000\n\005\209\018~\005\209\013\170\005\209\005\209\005\209\005\209\005\209\002\"\005\209\000\000\005\209\000\000\005\209\005\209\000\000\000\000\005\209\005\209\005\209\005\209\008\186\000\000\000\000\005\209\005\209\000Z\000\000\005\209\t\n\005\209\n\018\000\000\005\209\000Z\005\209\000Z\005\209\005\209\000\000\005\209\000Z\000\000\000\000\000\000\005\209\000\000\000\000\000\000\005\209\005\209\000\000\000\000\005\209\000\000\000\000\000\000\000\000\005\209\005\209\005\209\005\209\000\000\005\209\000\000\005\209\000\000\000\000\005\209\005\209\005\209\005\209\005\209\005\209\005\209\005\209\000\000\005\209\005\209\005\209\005\209\005\209\005\209\005\209\005\209\005\209\005\209\005\209\000\000\005\209\005\209\005\209\005\209\005\209\005\209\000\000\005\209\000\000\005\209\000\000\000\000\005\209\000\000\000\000\000\000\005\209\005\209\000\000\000\000\005\209\000\000\005\209\000\000\005\209\005\209\005\209\005\209\000\000\005\209\005\209\005\209\005\209\005\209\000\000\000\000\000\000\000\000\005\209\005\209\000\000\000\000\000\000\005\209\000R\000V\000f\000\170\000\000\000\174\000\000\000\178\000\246\000\000\000\254\000\000\001\014\000\000\001\022\000\000\001\030\0012\001:\001>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001F\000\000\000\000\000\000\001\166\000\000\001\170\000\000\000\000\001\174\000\000\000\000\000\000\001N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\178\000\000\000\000\001\182\000\000\000\000\000\000\000\000\000\000\001\206\001\202\000\000\001\210\000\000\000\000\000\000\000\000\nR\000\000\001\218\nV\001\222\000\000\001b\025\018\000\000\nZ\000\000\000\000\001\226\001\230\n^\025\022\001\234\001\238\001\242\002F\001\246\001\250\000\000\001\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\002\006\016\134\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\014\000R\007\190\007\198\000\170\016\138\000\174\000\000\008\n\008N\002\018\008V\020\254\008f\000\000\008n\000\000\008v\008\130\001:\008\138\000\000\002\022\000\000\021\002\001\230\000\000\000\000\002\026\012\226\001\242\004]\000\000\021\006\008\146\021\n\000\000\002\030\000\000\000\000\000\000\000\000\021\014\002\"\000\000\000\000\000\000\024.\000\000\000\000\021\030\000\000\000\000\000\000\021\"\000\000\000\000\000\000\000\000\000\n\021&\000\000\000\000\000\000\004\157\000\000\000\000\008\170\000\000\000\000\000\000\000\000\022\146\000\000\000\000\000\000\021*\023j\000\000\000\000\000\000\008\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nb\000\000\000\000\021.\000\000\000\000\0212\000\000\000\000\007}\007}\001\166\nr\013^\007}\000\000\013b\000\000\0216\000\000\000\000\000\000\014\202\021:\000\n\021>\000\000\021B\021F\000\000\021J\001\178\000\000\000\000\000\000\000\000\021N\000\000\000\000\021R\015R\013j\000\000\000\000\000\000\015&\000\000\000\000\000\000\000\000\001\218\000\000\001\222\000\000\021V\000\000\015.\000\000\021Z\021^\013~\001\230\0152\000\000\013\130\011\138\001\242\000\000\013\134\013\138\000\000\013\142\000\000\000\000\000\000\000\000\0156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\226\013\146\000\000\000\000\015:\015>\013\150\015B\000\000\000\n\000\000\015V\000\000\000\000\000\000\000\000\000\000\015b\013\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\130\nb\000\000\000\000\015\134\015\194\000\000\000\000\000\000\013\162\000\000\015\198\001\166\nr\013^\013\166\000\000\013b\000\000\000\000\000\000\000\000\015\206\014\202\013\170\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013f\013j\000\000\000\000\nR\015&\000\000\nV\000\000\000\000\001\218\025\018\001\222\nZ\000\000\000\000\015.\000\000\n^\025\022\013~\001\230\0152\000\000\013\130\011\138\001\242\000\000\013\134\013\138\000\000\013\142\000\000\000\000\000\000\000\000\0156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\226\013\146\000\000\016\134\015:\015>\013\150\015B\000\000\000\n\000\000\015V\000\000\000\000\000\000\000\000\000\000\015b\013\158\016\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\161\000\000\015\130\013\161\000\000\000\000\015\134\015\194\000\000\000\000\001\230\013\162\000\000\015\198\012\226\001\242\000\000\013\166\000\000\000\000\000\000\013\161\000\000\000\000\015\206\013\161\013\170\000\000\002:\013\161\000\000\000\000\002\"\000\000\000\000\013\161\000\000\000\000\013\161\013\161\000\000\013\161\013\161\000\000\000\n\002B\000\000\013\161\005&\004\157\000\000\013\161\000\000\000\000\013\161\000\000\013\161\013\161\t\"\t*\000\170\000\000\000\174\000\000\tn\t\178\000\000\t\186\000\000\t\202\000\000\t\210\000\000\t\218\t\230\000\000\t\238\013\161\000\000\013\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\161\t\246\000\000\008\221\008\221\000\000\000\000\0052\008\221\000\000\000\000\000\000\000\000\000\000\t\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\161\013\161\000\000\013\161\013\161\0056\000\000\013\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005>\000\000\000\000\000\000\000\000\013\161\000\000\n\014\013\161\013\161\013\161\013\161\000\000\000\000\000\000\000\000\013\161\013\161\013\161\000\000\013\161\013\161\013\161\001=\001=\001=\001=\000\000\001=\000\000\001=\001=\000\000\001=\000\000\001=\000\000\001=\000\000\001=\001=\001=\001=\000\000\000\000\004\233\000\000\020\238\004\233\000\000\000\000\000\000\000\000\000\000\000\000\001=\001=\001=\000\000\000\000\000\000\000\000\000\000\000\000\001=\000\000\004\233\000\000\000\000\001=\004\233\000\000\001=\004\233\004\233\000\000\001=\000\000\000\000\020\242\004\233\000\000\001=\004\233\004\233\000\000\004\233\004\233\000\000\001=\004\233\000\000\004\233\004\233\001=\000\000\004\233\000\000\000\000\004\233\000\000\004\233\004\233\001=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\233\001=\004\233\000\000\001=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\233\000\000\000\000\000\000\001=\000\000\000\000\004\233\000\000\001=\000\n\001=\000\000\000\000\001=\000\000\020\246\000\000\000\000\000\000\000\000\000\000\001=\000\000\000\000\001=\004\233\004\233\000\000\004\233\005\005\004\233\000\000\004\233\000\000\000\000\000\000\000\000\000\000\004\237\001=\004\233\004\237\000\000\001=\001=\004\233\000\000\000\000\004\233\000\000\004\233\000\000\000\000\000\000\021\174\000\000\004\233\004\233\004\233\004\237\004\233\004\233\004\233\004\237\000\000\000\000\004\237\004\237\000\000\000\000\000\000\000\000\000\000\004\237\000\000\000\000\004\237\004\237\000\000\004\237\004\237\000\000\000\000\004\237\000\153\004\237\004\237\000\000\000\000\004\237\000\000\000\000\004\237\000\000\004\237\004\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\237\000\000\004\237\000\000\000\153\000\000\000\000\000\000\000\000\000\000\000\153\000\153\004\237\000\000\000\000\000\000\000\000\000\000\000\000\004\237\000\153\000\000\000\000\011\250\000\000\000\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\237\004\237\000\000\004\237\005\t\004\237\000\000\004\237\000\153\000\000\000\000\000\000\000\000\013\245\000\000\004\237\013\245\000\000\000\000\000\000\004\237\000\000\000\000\004\237\000\000\004\237\000\000\000\000\000\000\000\000\000\000\004\237\004\237\004\237\013\245\004\237\004\237\004\237\013\245\000\000\000\000\013\190\013\245\000\000\000\000\000\000\000\153\000\000\013\245\000\000\000\000\013\245\013\245\012\002\013\245\013\245\000\000\000\000\013\198\000\000\013\245\013\210\000\000\000\000\013\245\000\000\000\153\013\245\000\000\013\245\013\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\153\000\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\245\000\000\013\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\245\000\000\000\000\000\000\000\000\000\000\000\000\013\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\245\013\245\000\000\013\245\000\000\013\226\000\000\013\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\245\000\000\013\245\000\000\000\000\000\000\000\000\000\000\013\245\013\245\013\245\000\000\013\245\013\245\013\245\nY\nY\nY\nY\000\000\nY\000\000\nY\nY\000\000\nY\000\000\nY\000\000\nY\000\000\nY\nY\nY\nY\000\000\000\000\001\137\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\000\000\nY\nY\nY\000\000\000\000\000\000\000\000\000\000\000\000\nY\000\000\001\137\000\000\000\000\nY\001\137\000\000\021\190\000\000\001\137\000\000\021\198\000\000\000\000\000\000\001\137\000\000\nY\001\137\001\137\000\000\001\137\001\137\000\000\nY\000\000\000\000\001\137\000\000\nY\000\000\001\137\000\000\000\169\001\137\000\000\001\137\001\137\nY\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\234\000\000\000\000\001\137\nY\001\137\000\000\nY\000\000\000\000\000\000\000\000\000\000\000\000\011\242\001\137\000\000\000\000\000\000\nY\000\169\000\169\000\000\000\000\nY\000\000\nY\000\000\000\000\nY\000\169\000\000\000\000\011\250\000\000\012\n\000\000\nY\000\000\000\000\nY\001\137\002V\000\000\001\137\001\137\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\000\000\nY\012\026\000\000\000\000\022\026\nY\001\137\000\000\000\000\001\137\001\137\001\137\001\137\000\000\000\000\000\000\000\000\002\254\001\137\001\137\000\000\001\137\001\137\001\137\nI\nI\nI\nI\000\000\nI\000\000\nI\nI\000\000\nI\000\000\nI\000\000\nI\000\169\nI\nI\nI\nI\000\000\000\000\012\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nI\nI\nI\000\169\000\000\000\000\000\000\000\000\000\000\nI\000\000\000\000\000\000\000\000\nI\000\000\000\000\000\000\000\169\000\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nI\nM\nM\nM\nM\000\000\nM\nI\nM\nM\000\000\nM\nI\nM\000\000\nM\000\000\nM\nM\nM\nM\nI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nM\nM\nM\000\000\000\000\000\000\000\000\000\000\nI\nM\000\000\nI\000\000\000\000\nM\000\000\000\000\022\030\000\000\000\000\000\000\000\000\000\000\nI\000\000\000\000\000\000\nM\nI\000\000\nI\000\000\000\000\nI\nM\000\000\000\000\000\000\000\000\nM\000\000\nI\000\000\000\000\nI\000\000\000\000\000\000\nM\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nI\000\000\000\000\000\000\021\194\nI\000\000\000\000\000\000\nM\000\000\000\000\nM\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nM\000\000\000\000\000\000\000\000\nM\000\000\nM\000\000\000\000\nM\000\000\000R\007\190\007\198\000\170\000\000\000\174\nM\008\n\008N\nM\008V\000\000\008f\000\000\008n\000\000\008v\008\130\001:\008\138\000\000\000\000\002v\000\000\nM\002\198\000\000\000\000\000\000\nM\000\000\000\000\022&\008\146\022B\000\000\000\000\000\000\000\000\000\000\000\000\022N\000\000\002~\000\000\000\000\008\154\002\005\000\000\000\000\000\000\002\005\000\000\000\000\000\000\000\000\000\000\002\134\000\000\022f\002\005\002\005\000\000\002\230\002\238\000\000\008\170\000\000\000\000\002\005\000\000\022\146\000\000\002\166\000\000\000\000\002\142\000\000\002\158\002\005\008\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\174\022\178\002\005\000\000\023\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\005\000\000\000\000\000\000\023\"\000\000\000\000\000\000\000\000\023.\000\000\008i\000\000\000\000\023:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023F\000\000\000\000\024\006\002\182\000\000\000\000\002\005\002\005\000\000\000\000\002\150\000\000\000}\000\000\000\000\000}\000\000\024\018\000\000\000\000\000\000\000\000\024*\002\005\000\000\000\000\002\005\002\005\002\005\002\005\000\000\000\000\000\000\002~\000\000\002\005\002\005\000}\002\246\002\190\002\005\000}\000\000\000\000\000\000\000\000\000\000\002\134\000\000\000\000\000}\000}\000\000\000}\000}\000\000\000\000\000\000\000\000\000}\000\000\000\000\000\000\002\166\000\000\000\000\002\142\000e\002\158\000}\000e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000e\002\174\000\000\000}\000e\000\000\000\000\000\000\000e\000\000\000\000\000\000\000\000\000}\002\134\000\000\000\000\000e\000e\000\000\000e\000e\000\000\000\000\000\000\000\000\000e\000\000\000\000\000\000\000e\000\000\000\000\002\142\000\000\002\158\000e\000\000\000\000\002\182\000\000\000\000\000}\000}\000\000\000\000\002\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000e\000\000\000e\000}\000\000\000\000\000}\000}\000}\000}\000\000\000\000\000e\000\000\000\000\000}\000}\000\000\000}\002\190\000}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000e\000\000\000\000\000e\000e\000\000\000\000\002\150\000\000\000]\000\000\000\000\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000e\000\000\000\000\000e\000e\000e\000e\000\000\000\000\000\000\000]\000\000\000e\000e\000]\000e\000e\000e\000]\000\000\000\000\000\000\000\000\000\000\000]\000\000\000\000\000]\000]\000\000\000]\000]\000\000\000\000\000\000\000\000\000]\000\000\000\000\000\000\000]\000\000\000\000\002\142\000a\000]\000]\000a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000]\000\000\000]\000a\000\000\000\000\000\000\000a\000\000\000\000\000\000\000\000\000]\000a\000\000\000\000\000a\000a\000\000\000a\000a\000\000\000\000\000\000\000\000\000a\000\000\000\000\000\000\000a\000\000\000\000\002\142\000\000\000a\000a\000\000\000\000\000]\000\000\000\000\000]\000]\000\000\000\000\002\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000\000\000a\000]\000\000\000\000\000]\000]\000]\000]\000\000\000\000\000a\000\000\000\000\000]\000]\000\000\000]\000]\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000a\000\000\000\000\002\150\000\000\000q\000\000\000\000\000q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000a\000a\000a\000\000\000\000\000\000\002~\000\000\000a\000a\000q\000a\000a\000a\000q\000\000\000\000\000\000\000\000\000\000\002\134\000\000\000\000\000q\000q\000\000\000q\000q\000\000\000\000\000\000\000\000\000q\000\000\000\000\000\000\000q\000\000\000\000\002\142\000i\002\158\000q\000i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002~\002\174\000\000\000q\000i\000\000\000\000\000\000\000i\000\000\000\000\000\000\000\000\000q\002\134\000\000\000\000\000i\000i\000\000\000i\000i\000\000\000\000\000\000\000\000\000i\000\000\000\000\000\000\000i\000\000\000\000\002\142\000\000\002\158\000i\000\000\000\000\000q\000\000\000\000\000q\000q\000\000\000\000\002\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000i\000\000\000i\000q\000\000\000\000\000q\000q\000q\000q\000\000\000\000\000i\000\000\000\000\000q\000q\000\000\000q\000q\000q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000i\000\000\000\000\000i\000i\000\000\000\000\002\150\000\000\000m\000\000\000\000\000m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000i\000\000\000\000\000i\000i\000i\000i\000\000\000\000\000\000\002~\000\000\000i\000i\000m\000i\000i\000i\000m\000\000\000\000\000\000\000\000\000\000\002\134\000\000\000\000\000m\000m\000\000\000m\000m\000\000\000\000\000\000\000\000\000m\000\000\000\000\000\000\000m\000\000\000\000\002\142\000u\002\158\000m\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002~\002\174\000\000\000m\000u\000\000\000\000\000\000\000u\000\000\000\000\000\000\000\000\000m\002\134\000\000\000\000\000u\000u\000\000\000u\000u\000\000\000\000\000\000\000\000\000u\000\000\000\000\000\000\002\166\000\000\000\000\002\142\000\000\002\158\000u\000\000\000\000\000m\000\000\000\000\000m\000m\000\000\000\000\002\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\174\000\000\000u\000m\000\000\000\000\000m\000m\000m\000m\000\000\000\000\000u\000\000\000\000\000m\000m\000\000\000m\000m\000m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\182\000\000\000\000\000u\000u\000\000\000\000\002\150\000\000\002v\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\000\000\000\000\000u\000u\000u\000u\000\000\000\000\000\000\002~\000\000\000u\000u\000\133\000u\000u\000u\000\133\000\000\000\000\000\000\000\000\000\000\002\134\000\000\000\000\000\133\000\133\000\000\000\133\002\238\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\000\002\166\000\000\000\000\002\142\002v\002\158\000\133\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002~\002\174\000\000\000\133\000y\000\000\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\133\002\134\000\000\000\000\000y\000y\000\000\000y\000y\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\002\166\000\000\000\000\002\142\000\000\002\158\000y\000\000\000\000\002\182\000\000\000\000\000\133\000\133\000\000\000\000\002\150\000\000\001\153\000\000\000\000\001\153\000\000\000\000\000\000\000\000\002\174\000\000\000y\000\133\000\000\000\000\000\133\000\133\000\133\000\133\000\000\000\000\000y\001\153\000\000\000\133\000\133\001\153\002\246\002\190\000\133\000\000\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\000\000\001\153\000\000\001\153\001\153\000\000\000\000\000\000\002\182\000\000\000\000\000y\000y\001\153\000\000\002\150\001\153\002v\001\153\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\000\000\000y\000y\000y\000y\000\000\000\000\000\000\002~\001\153\000y\000y\000\129\000y\002\190\000y\000\129\000\000\000\000\000\000\000\000\001\153\002\134\000\000\000\000\000\129\000\129\000\000\000\129\002\238\000\000\000\000\011\146\000\000\000\129\000\000\000\000\000\000\002\166\000\000\004A\002\142\004A\002\158\000\129\004A\000\000\001\153\005\250\000\000\001\153\000\000\000\000\000\000\001\153\000\000\000\000\000\000\000\000\000\000\004A\000\000\000\000\000\000\002\174\000\000\000\129\000\000\000\000\004A\004A\000\000\001\153\004A\004A\000\000\000\129\000\000\006\002\004A\000\000\004A\001\153\001\153\001\153\000\000\000\000\000\000\000\000\004A\004A\000\000\000\000\004A\004A\004A\000\000\004A\004A\000\000\004A\000\000\002\182\000\000\000\000\000\129\000\129\000\000\000\000\002\150\000\000\000\000\000\000\000\000\000\000\004A\004A\000\000\000\000\000\000\000\000\004A\000\129\000\000\004A\000\129\000\129\000\129\000\129\000\000\000\000\000\000\000\000\004A\000\129\000\129\000\000\000\129\002\190\000\129\000\000\004A\000\000\004A\001\166\004A\n\166\000\000\000\000\n\170\000\000\000\000\000\000\000\000\000\000\004A\000\000\000\000\000\000\000\000\000\000\004A\000\000\000\000\001\178\000\000\000\000\004A\000\000\000\000\004A\000\000\000\000\n\174\011\006\000\000\004A\011n\011\134\000\000\000\000\000\000\000\000\001\218\000\000\001\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\206\001\230\000\000\000\000\n\210\011\138\001\242\000\000\n\214\n\218\000\000\n\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\226\n\230\000\000\000\000\000\000\000\000\n\234\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\001\166\000\000\n\166\n\242\000\000\n\170\000\000\000\000\000\000\000\000\000\000\006\001\000\000\011\142\000\000\011\170\000\000\000\000\000\000\000\000\001\178\000\000\000\000\000\000\000\000\n\246\000\000\000\000\000\000\n\174\011\006\n\250\000\000\011n\011\134\000\000\000\000\012\138\000\000\001\218\n\254\001\222\000\000\000\000\000\000\000\000\002\"\000\000\000\000\n\206\001\230\000\000\000\000\n\210\011\138\001\242\000\000\n\214\n\218\000\000\n\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\226\n\230\000\000\000\000\000\000\000\000\n\234\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\001\166\000\000\n\166\n\242\000\000\n\170\000\000\000\000\000\000\000\000\000\000\006\001\000\000\011\142\000\000\011\170\000\000\000\000\000\000\000\000\001\178\000\000\000\000\000\000\000\000\n\246\000\000\000\000\000\000\n\174\011\006\n\250\000\000\011n\011\134\000\000\000\000\011\178\000\000\001\218\n\254\001\222\000\000\000\000\000\000\000\000\002\"\000\000\000\000\n\206\001\230\000\000\000\000\n\210\011\138\001\242\000\000\n\214\n\218\000\000\n\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\226\n\230\000\000\000\000\000\000\000\000\n\234\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\001\166\000\000\n\166\n\242\000\000\n\170\000\000\000\000\000\000\000\000\000\000\006\001\000\000\011\142\000\000\011\170\000\000\000\000\000\000\000\000\001\178\000\000\000\000\000\000\000\000\n\246\000\000\000\000\000\000\n\174\011\006\n\250\000\000\011n\011\134\000\000\000\000\005e\000\000\001\218\n\254\001\222\000\000\000\000\000\000\000\000\002\"\000\000\000\000\n\206\001\230\000\000\000\000\n\210\011\138\001\242\000\000\n\214\n\218\003%\n\222\000j\003%\000r\000\000\000\130\003%\000\000\003%\000\000\000\000\000\000\000\138\003%\003%\n\226\n\230\000\000\000\000\000\000\000\000\n\234\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\242\000\000\000\000\000\000\000\000\000\000\000\146\003%\006\001\000\000\011\142\003%\011\170\000\000\000\000\000\000\000\000\003!\000\000\000\182\003!\000\190\n\246\000\206\003!\000\000\003!\003%\n\250\000\000\000\214\003!\003!\000\000\001\189\000\000\000\000\n\254\000\000\003%\000\162\000\000\000\000\002\"\000\000\000\000\000\000\003%\000\000\000\000\000\000\003%\003%\000\000\000\000\000\000\000\000\000\222\003!\000\000\000\000\003%\003!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003%\000\000\000\000\000\000\000\000\000\000\000\000\003!\000\000\000\000\003%\000\000\000\000\000\000\000\000\003%\000\000\000\000\000\000\003!\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003!\000\000\000\000\000\000\003!\003!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000\000\000\000\000\000\000\000\003%\000\000\000\000\003%\003%\003!\000\000\003%\000\000\000\000\000\000\000\000\003%\003%\000\000\003!\000\000\003%\000\000\000\000\003!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\166\000\000\n\166\000\000\000\000\n\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\001\178\000\000\003!\003!\000\000\000\000\003!\000\000\000\000\n\174\011\006\003!\003!\011n\011\134\000\000\003!\000\000\000\000\001\218\000\000\001\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\206\001\230\000\000\000\000\n\210\011\138\001\242\000\000\n\214\n\218\000\000\n\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\161\000\000\000\000\001\161\000\000\000\000\n\226\n\230\000\000\000\000\000\000\000\000\n\234\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\001\161\000\000\000\000\n\242\001\161\000\000\000\000\000\000\001\161\000\000\000\000\006\001\000\000\000\000\001\161\011\170\000\000\001\161\001\161\000\000\001\161\001\161\000\000\000\000\000\000\n\246\001\161\000\000\000\000\000\000\001\161\n\250\000\000\001\161\000\000\001\161\001\161\001\201\000\000\000\000\n\254\000\000\000\000\000\000\000\000\000\000\002\"\000\000\005\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\161\000\000\001\161\000\000\005\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\161\005\209\000\000\005\209\n]\n]\000\000\000\000\000\000\000\000\005\209\000\000\000\000\000\000\000\000\005\209\000\000\000\000\005\209\000\000\000\000\000\000\005\209\000\000\000\000\000\000\001\161\014\014\005\209\001\161\000\000\000\000\000\000\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n]\000\000\005\209\000Z\000\000\000\000\000\000\001\161\000\000\001\161\000\000\000\000\000\000\000\000\000\000\014\022\001\161\001\161\000\000\001\161\001\161\001\161\000\000\000\000\000\000\n]\000\000\005\209\000\000\000\000\005\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\209\000\000\000\000\000\000\000\000\005\209\005\209\005\209\000\000\005\209\005\209\000\000\005\209\000\000\000\000\000\000\000\000\000\000\005\209\000\000\000\000\005\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\209\000\000\000\000\000\000\005\209\005\209\n]\000R\000V\000f\000\170\007\186\000\174\nR\000\178\000\246\nV\000\254\000\000\001\014\000\000\001\022\nZ\001\030\0012\001:\001>\n^\001\166\000\000\001\170\000\000\000\000\001\174\000\000\000\000\000\000\000\000\000\000\000\000\001F\000\000\014\206\000\000\000\000\000\000\000\000\000\000\001\178\000\000\000\000\001\182\000\000\001N\000\000\000\000\000\000\001\198\001\202\000\000\001\210\000\000\n\162\000\000\000\000\000\000\000\000\001\218\000\000\001\222\000\000\000\000\000\000\001^\000\000\000\000\000\000\001\226\001\230\001j\011\154\001\234\001\238\001\242\000\000\001\246\001\250\001b\001\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\254\000\000\000\000\000\000\n\134\002\002\000\000\000\000\000\000\000\000\002\006\000\000\021\002\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\006\002\014\021\n\n\185\n\185\000\000\000\000\000\000\000\n\021\014\000\000\002\018\008y\000\000\021\018\000\000\000\000\021\030\000\000\001\137\000\000\021\"\001\137\002\022\000\000\000\000\000\000\021&\000\000\002\026\000\000\000\000\008y\000\000\008y\000\000\005\249\n\138\002\030\000\000\001\137\n\185\000\000\021*\002\"\000\000\005\249\000\000\001\137\000\000\000\000\005\249\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\001\137\001\137\000\000\000\000\000\000\000\000\n\185\000\000\021.\000\000\001\137\0212\000\000\001\137\000\000\001\137\001\137\000\000\000\000\000\000\000\000\000\000\000\000\0216\000\000\000\000\000\000\000\000\021:\000\n\021>\000\000\021B\021F\000\000\021J\001\137\000\000\001\137\000\000\000\000\021N\000\000\000\000\021R\013\217\000\000\000\000\013\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021V\000\000\000\000\000\000\021Z\021^\n\185\013\217\000\000\000\000\000\000\013\217\000\000\000\000\005\170\001\137\002N\000\000\001\137\001\137\000\000\013\217\001\137\000\000\000\000\013\217\000\000\013\217\013\217\000\000\000\000\005\178\000\000\000\000\005\190\001\137\000\000\013\217\001\137\001\137\013\217\001\137\013\217\000\000\000\000\000\000\003\n\001\137\001\137\000\000\001\137\001\137\001\137\000\000\t~\005\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\217\t\190\005\209\000\000\005\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\217\005\209\005\209\005\209\000\000\000\000\000\000\005\202\000\000\000\000\005\209\005\209\000\000\005\209\000\000\005\209\000\000\000\000\005\209\000\000\005\209\000\000\005\209\000\000\000\000\005\209\013\217\013\217\005\209\013\217\000\000\005\206\005\209\013\217\000\000\000\000\000\000\000\000\005\209\005\209\n>\005\214\000\000\000\000\005\209\000Z\000\000\000\000\000\000\005\209\000\000\013\217\000\000\000\000\005\209\000Z\000\000\013\217\000\000\005\209\000\000\013\217\013\217\013\217\000\000\000\000\000\000\000\000\000\000\005\209\000\000\000\000\005\209\000\000\000\000\000\000\000\000\000\000\000\000\005\209\000\000\000\000\005\209\000\000\005\209\000\000\000\000\000\000\000\000\005\209\005\209\005\209\000\000\005\209\005\209\000\000\005\209\000\000\000\000\005\209\005\209\005\209\005\209\005\209\005\209\005\209\005\209\014B\000\000\000\000\014\146\000\000\005\209\000\000\000\000\005\209\000\000\000\000\000\000\000\000\005\209\000\000\000\000\000\000\005\209\005\209\000\000\000\000\014J\000\000\005\209\000\000\002\021\000\000\005\209\005\209\002\021\000\000\000\000\000\000\000\000\000\000\014R\000\000\000\000\002\021\002\021\000\000\014\162\014\170\000\000\000\000\000\000\001%\002\021\000\000\001%\000\000\014r\000\000\000\000\014Z\000\000\014j\002\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014J\000\000\000\000\000\000\001%\000\000\000\000\000\000\001%\000\000\014z\000\000\002\021\000\000\014R\000\000\000\000\001%\001%\000\000\001%\001%\002\021\000\000\000\000\000\000\001%\000\000\000\000\000\000\014r\000\000\000\000\014Z\000\000\014j\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\130\000\000\000\000\002\021\000\000\000\000\000\000\014b\014z\001\013\001%\000\000\001\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\002\021\000\000\002\021\000\000\000\000\000\000\000\000\001\013\000\000\002\021\002\021\001\013\014\178\014\138\002\021\001\013\000\000\000\000\000\000\000\000\000\000\014R\000\000\014\130\001\013\001\013\001%\001\013\001\013\000\000\014b\000\000\001\005\001\013\000\000\001\005\000\000\001\013\000\000\000\000\014Z\000\000\014j\001\013\000\000\000\000\001%\000\000\001%\000\000\000\000\000\000\000\000\001\005\000\000\001%\001%\001\005\001%\014\138\001%\001\005\000\000\001\013\000\000\001\013\000\000\001\005\000\000\000\000\001\005\001\005\000\000\001\005\001\005\001\013\000\000\000\000\000\000\001\005\000\000\000\000\000\000\001\005\000\000\000\000\014Z\000\000\001\005\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\000\000\000\000\001\013\000\000\000\000\000\000\014b\001\005\001\t\001\005\000\000\001\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\005\000\000\000\000\001\013\000\000\001\013\000\000\000\000\000\000\000\000\001\t\000\000\001\013\001\013\001\t\001\013\001\013\001\013\001\t\000\000\000\000\000\000\000\000\000\000\001\t\000\000\001\005\001\t\001\t\001\005\001\t\001\t\000\000\014b\000\000\001\025\001\t\000\000\001\025\000\000\001\t\000\000\000\000\014Z\000\000\001\t\001\t\000\000\000\000\001\005\000\000\001\005\000\000\000\000\000\000\000\000\014J\000\000\001\005\001\005\001\025\001\005\001\005\001\005\001\025\000\000\001\t\000\000\001\t\000\000\014R\000\000\000\000\001\025\001\025\000\000\001\025\001\025\001\t\000\000\000\000\000\000\001\025\000\000\000\000\000\000\001\025\000\000\000\000\014Z\000\000\014j\001\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000\000\000\000\001\t\000\000\000\000\000\000\014b\014z\001\017\001\025\000\000\001\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\025\000\000\000\000\001\t\000\000\001\t\000\000\000\000\000\000\000\000\014J\000\000\001\t\001\t\001\017\001\t\001\t\001\t\001\017\000\000\000\000\000\000\000\000\000\000\014R\000\000\001\025\001\017\001\017\001\025\001\017\001\017\000\000\014b\000\000\001\021\001\017\000\000\001\021\000\000\001\017\000\000\000\000\014Z\000\000\014j\001\017\000\000\000\000\001\025\000\000\001\025\000\000\000\000\000\000\000\000\014J\000\000\001\025\001\025\001\021\001\025\001\025\001\025\001\021\000\000\001\017\000\000\001\017\000\000\014R\000\000\000\000\001\021\001\021\000\000\001\021\001\021\001\017\000\000\000\000\000\000\001\021\000\000\000\000\000\000\001\021\000\000\000\000\014Z\000\000\014j\001\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\000\000\000\000\001\017\000\000\000\000\000\000\014b\014z\001\029\001\021\000\000\001\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\021\000\000\000\000\001\017\000\000\001\017\000\000\000\000\000\000\000\000\014J\000\000\001\017\001\017\001\029\001\017\001\017\001\017\001\029\000\000\000\000\000\000\000\000\000\000\014R\000\000\001\021\001\029\001\029\001\021\001\029\001\029\000\000\014b\000\000\014B\001\029\000\000\001-\000\000\014r\000\000\000\000\014Z\000\000\014j\001\029\000\000\000\000\001\021\000\000\001\021\000\000\000\000\000\000\000\000\014J\000\000\001\021\001\021\001-\001\021\001\021\001\021\001-\000\000\014z\000\000\001\029\000\000\014R\000\000\000\000\001-\001-\000\000\001-\014\170\001\029\000\000\000\000\000\000\001-\000\000\000\000\000\000\014r\000\000\000\000\014Z\000\000\014j\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\130\000\000\000\000\001\029\000\000\000\000\000\000\014b\014z\014B\001-\000\000\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001-\000\000\000\000\001\029\000\000\001\029\000\000\000\000\000\000\000\000\014J\000\000\001\029\001\029\001!\001\029\001\029\001\029\001!\000\000\000\000\000\000\000\000\000\000\014R\000\000\014\130\001!\001!\001-\001!\001!\000\000\014b\000\000\014B\001!\000\000\001)\000\000\014r\000\000\000\000\014Z\000\000\014j\001!\000\000\000\000\001-\000\000\001-\000\000\000\000\000\000\000\000\014J\000\000\001-\001-\001)\014\178\014\138\001-\001)\000\000\014z\000\000\001!\000\000\014R\000\000\000\000\001)\001)\000\000\001)\014\170\001!\000\000\000\000\000\000\001)\000\000\000\000\000\000\014r\000\000\000\000\014Z\000\000\014j\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\130\000\000\000\000\001!\000\000\000\000\000\000\014b\014z\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\001!\000\000\001!\000\000\000\000\000\000\000\000\000\000\000\000\001!\001!\000\000\001!\014\138\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\166\014\130\001\170\000\000\001)\001\174\000\000\000\000\014b\000\000\000\000\000\000\000\000\000\000\008y\000\000\000\000\000\000\000\000\000\000\001\178\000\000\000\000\001\182\001)\000\000\001)\000\000\000\000\001\198\001\202\000\000\001\210\001)\001)\000\000\001)\014\138\001)\001\218\000\000\001\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\226\001\230\000\000\000\000\001\234\001\238\001\242\000\000\001\246\001\250\001\166\001\254\001\170\000\000\000\000\001\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018f\000\000\000\000\002\002\000\000\000\000\001\178\000\000\002\006\001\182\000\000\000\n\000\000\000\000\000\000\001\198\001\202\000\000\001\210\000\000\002\014\000\000\000\000\000\000\000\000\001\218\020\254\001\222\000\000\000\000\002\018\000\000\000\000\000\000\000\000\001\226\001\230\000\000\021\002\001\234\001\238\001\242\002\022\001\246\001\250\000\000\001\254\021\006\002\026\021\n\000\000\000\000\000\000\000\000\000\000\000\000\021\014\002\030\000\000\000\000\000\000\021\018\002\002\002\"\021\030\000\000\000\000\002\006\021\"\000\000\000\n\000\000\000\000\000\000\021&\000\000\000\000\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000\000\023N\000\000\000\000\n\141\002\018\021*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022\000\000\000\000\000\000\000\000\000\000\002\026\000\000\000\000\000\000\000\000\000\000\n\141\000\000\021.\002\030\000\000\0212\000\000\000\000\000\000\002\"\000\000\001\166\000\000\001\170\000\000\000\000\001\174\0216\000\000\000\000\000\000\000\000\021:\000\n\021>\000\000\021B\021F\000\000\021J\000\000\001\178\000\000\000\000\001\182\021N\000\000\000\000\021R\000\000\001\198\0076\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\001\218\000\000\001\222\021V\000\000\000\000\000\000\021Z\021^\n\141\001\226\001\230\000\000\000\000\001\234\001\238\001\242\000\000\001\246\001\250\001\166\001\254\001\170\000\000\000\000\001\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\001\178\000\000\002\006\001\182\000\000\000\n\000\000\000\000\000\000\001\198\002\n\000\000\001\210\000\000\002\014\000\000\000\000\000\000\000\000\001\218\000\000\001\222\000\000\000\000\002\018\000\000\000\000\000\000\000\000\001\226\001\230\006\030\000\000\001\234\001\238\001\242\002\022\001\246\001\250\0049\001\254\0049\002\026\000\000\0049\000\000\000\000\000\000\000\000\000\000\000\000\002\030\000\000\000\000\000\000\000\000\002\002\002\"\000\000\0049\000\000\002\006\0049\000\000\000\n\000\000\000\000\000\000\0049\0049\000\000\0049\000\000\002\014\000\000\000\000\000\000\000\000\0049\020\254\0049\000\000\000\000\002\018\000\000\000\000\000\000\000\000\0049\0049\000\000\021\002\0049\0049\0049\002\022\0049\0049\000\000\0049\021\006\002\026\021\n\000\000\000\000\000\000\000\000\000\000\000\000\021\014\002\030\000\000\000\000\000\000\021\018\0049\002\"\021\030\000\000\000\000\0049\021\"\000\000\0049\000\000\000\000\000\000\021&\000\000\000\000\000\000\000\000\0049\000\000\000\000\000\000\000\000\000\000\022n\000\000\000\000\005\209\000\000\021*\005\209\000v\000\000\000\000\005\209\000\000\005\209\000\000\000\000\000\000\0049\005\209\005\209\000\000\000\000\000\000\0049\000\000\000\000\000\000\000\000\000\000\n\141\005\209\021.\0049\005\209\0212\000\000\000\000\005\209\0049\005\209\000\000\000\000\000\000\000\000\005\209\005\209\0216\000\000\000\000\005\209\000\000\021:\000\n\021>\000\000\021B\021F\000\000\021J\000\000\000\000\000\000\005\209\000\000\021N\005\209\000\194\021R\000\000\005\209\000\000\005\209\005\209\001\002\000Z\005\209\005\209\005\209\005\209\000\000\000\000\000\000\021V\005\209\005\209\005\209\021Z\021^\n\141\005\209\005\209\005\209\000\000\000\000\000\000\001f\000\000\000\000\000\000\005\209\000Z\000\000\000\000\005\209\000\000\000\000\000\000\005\209\000\000\005\209\005\209\005\209\000\000\000\000\005\209\005\209\005\209\000\000\000\000\005\209\000\000\000\000\000\000\005\209\005\209\005\209\000\000\004\030\000\000\000\000\005\209\000\000\000Z\000\000\004\242\005\209\000\000\000\000\000\000\000Z\000\000\000\000\005\209\005\209\000\000\005\209\000\000\005\209\005\209\000\000\005\209\000\000\000\000\000\000\005\209\005\209\000\000\005\209\005\209\005\209\000\000\000\000\005\209\000\000\005\209\000\000\000\000\005\209\005\209\000\000\000\000\000\000\005\209\000\000\005\209\000\000\000\000\005\209\000\000\000\000\000\000\005\209\005\209\000\000\005\209\005\209\000\000\000\000\005\209\005\209\000\000\000\000\000\000\005\209\005\209\000\000\000\000\000\000\005\209\001\166\000\000\001\186\000\000\000\000\001\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\209\000\000\000\000\005\209\005\209\000\000\001\178\005\209\000\000\001\182\005\209\005\209\005\209\005\209\005\209\001\194\001\214\005\209\001\210\005\209\005\209\000\000\000\000\000\000\005\209\001\218\000\000\001\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005j\001\230\000\000\000\000\005n\001\238\001\242\000\000\005r\005v\001\166\005z\001\186\000\000\000\000\001\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005~\000\000\000\000\001\178\000\000\005\130\001\182\000\000\000\n\000\000\000\000\000\000\001\194\007\030\000\000\001\210\005\209\005\138\000\000\005\209\003F\000\000\001\218\005\209\001\222\005\209\000\000\000\000\000\000\000\000\005\209\005\209\005j\001\230\000\000\000\000\005n\001\238\001\242\005\142\005r\005v\000\000\005z\000\000\005\146\000\000\000\000\005\209\000\000\000\000\005\209\003\138\000\000\005\150\005\209\000\000\005\209\000\000\005~\002\"\005\209\005\209\005\209\005\130\005\209\000\000\000\n\005\209\003\202\000\000\000\000\005\209\000\000\005\209\000\000\005\138\005\209\000\000\005\209\005\209\007f\000\000\000\000\000\000\000\000\000Z\000\000\000\000\005\209\000\000\000\000\000\000\005\209\000\000\000\000\000\000\005\209\005\142\000\000\000\000\005\209\005\209\000\000\005\146\000\000\005\209\000\000\000\000\005\209\005\209\005\209\000\000\005\150\000\000\000\000\000\000\000\000\000Z\002\"\000\000\005\209\000\000\000\000\000\000\000\000\005\209\000\000\000\000\005\209\000\000\005\209\000\000\005\209\005\209\000Z\005\209\000\000\005\209\000\000\000\000\000\000\000\000\005\209\000\000\000\000\005\209\000\000\000\000\000\000\005\209\005\209\000\000\005\209\000\000\000\000\000\000\000\000\000\000\000\000\005\209\000\000\000\000\005\209\000\000\000\000\000\000\005\209\005\209\000\000\005\209\005\209\000\000\000\000\005\209\000\000\000\000\000\000\000\000\005\209\005\209\000\000\000\000\000\000\005\209\005\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\166\000\000\001\186\000\000\005\209\001\190\000\000\005\209\005\209\000\000\000\000\005\209\000\000\000\000\000\000\000\000\005\209\005\209\000\000\000\000\001\178\005\209\000\000\001\182\005\209\005\209\000\000\000\000\005\209\001\194\005\134\000\000\001\210\005\209\005\209\000\000\000\000\000\000\005\209\001\218\000\000\001\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005j\001\230\000\000\000\000\005n\001\238\001\242\000\000\005r\005v\000\000\005z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005~\000\000\000\000\000\000\000\000\005\130\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000R\000V\000f\000\170\005\138\000\174\nR\000\178\000\246\nV\000\254\000\000\001\014\024\254\001\022\nZ\001\030\0012\001:\001>\n^\025\002\000\000\000\000\000\000\000\000\005\142\000\000\000\000\001\166\000\000\n\166\005\146\001F\n\170\000\000\000\000\000\000\000\000\000\000\000\000\005\150\000\000\000\000\000\000\000\000\001N\002\"\000\000\001\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\174\n\186\000\000\000\000\000\000\000\000\000\000\000\000\001^\000\000\001\218\000\000\001\222\000\000\001j\000\000\000\000\000\000\000\000\000\000\n\206\001\230\001b\000\000\n\210\001\238\001\242\000\000\n\214\n\218\001\166\n\222\n\166\000\000\000\000\n\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\226\n\230\000\000\000\000\001\178\000\000\n\234\000\000\000\000\000\n\000\000\000\000\000\000\n\174\n\238\000\000\000\000\000\n\n\242\000\000\000\000\000\000\004\137\001\218\000\000\001\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\206\001\230\000\000\001n\n\210\001\238\001\242\n\246\n\214\n\218\001\166\n\222\n\166\n\250\000\000\n\170\000\000\000\000\000\000\000\000\000\000\000\000\n\254\000\000\000\000\000\000\n\226\n\230\002\"\000\000\001\178\000\000\n\234\000\000\000\000\000\n\000\000\000\000\000\000\n\174\011\006\000\000\000\000\000\000\n\242\000\000\000\000\000\000\000\000\001\218\000\000\001\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\206\001\230\000\000\000\000\n\210\001\238\001\242\n\246\n\214\n\218\001\166\n\222\013^\n\250\000\000\013b\000\000\000\000\000\000\000\000\000\000\000\000\n\254\000\000\000\000\000\000\n\226\n\230\002\"\000\000\001\178\000\000\n\234\000\000\000\000\000\n\000\000\000\000\000\000\013f\014\186\000\000\000\000\000\000\n\242\000\000\000\000\000\000\000\000\001\218\000\000\001\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013~\001\230\000\000\000\000\013\130\001\238\001\242\n\246\013\134\013\138\001\166\013\142\013^\n\250\000\000\013b\000\000\000\000\000\000\000\000\000\000\000\000\n\254\000\000\000\000\000\000\n\226\013\146\002\"\000\000\001\178\000\000\013\150\000\000\000\000\000\n\000\000\000\000\000\000\013f\013j\000\000\000\000\000\000\013\158\000\000\000\000\000\000\000\000\001\218\000\000\001\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013~\001\230\000\000\000\000\013\130\001\238\001\242\013\162\013\134\013\138\001\166\013\142\013^\013\166\000\000\013b\000\000\000\000\000\000\000\000\000\000\000\000\013\170\000\000\000\000\000\000\n\226\013\146\002\"\000\000\001\178\000\000\013\150\000\000\000\000\000\n\000\000\000\000\000\000\013f\013\154\000\000\000\000\000\000\013\158\000\000\000\000\000\000\000\000\001\218\000\000\001\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013~\001\230\000\000\000\000\013\130\001\238\001\242\013\162\013\134\013\138\000\000\013\142\000\000\013\166\000\000\000\000\000\000\000\000\000\000\008q\000\000\000\000\013\170\000\000\000\000\000\000\n\226\013\146\002\"\000\000\000\000\008q\013\150\000\000\000\000\000\n\000\000\000\000\000\000\000\000\008q\000\000\008q\000\000\013\158\000\000\000\000\000\000\000\000\008q\000\000\000\000\000\000\000\000\008q\000\000\023J\008q\000\000\000\000\000\000\008q\021\202\000\000\000\000\000\000\013\162\008q\021\002\000\000\000\000\000\000\013\166\000\000\000\000\000\000\000\000\021\006\000\000\021\n\000\000\013\170\000\000\008q\000\000\000\000\021\014\002\"\000\000\000\000\000\000\021\018\000\000\000\000\021\030\000\000\000\000\000\000\021\"\000\000\000\000\000\000\000\000\000\000\021&\000\000\000\000\000\000\008q\000\000\000\000\008q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021*\023j\000\000\008q\000\000\000\000\000\000\000\000\008q\008q\008q\000\000\008q\008q\000\000\008q\000\000\000\000\000\000\000\000\000\000\008q\000\000\000\000\008q\021.\000\000\000\000\0212\000\000\007\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008q\0216\000\000\007\229\008q\008q\021:\000\n\021>\000\000\021B\021F\007\229\021J\007\229\000\000\000\000\000\000\000\000\021N\000\000\007\229\021R\000\000\000\000\000\000\007\229\000\000\020\254\007\229\000\000\000\000\000\000\007\229\000\000\000\000\000\000\021V\000\000\007\229\021\002\021Z\021^\000\000\000\000\000\000\000\000\000\000\000\000\021\006\000\000\021\n\000\000\000\000\000\000\007\229\023j\000\000\021\014\000\000\000\000\000\000\000\000\021\018\000\000\000\000\021\030\000\000\000\000\000\000\021\"\000\000\000\000\000\000\000\000\000\000\021&\000\000\000\000\000\000\007\229\000\000\000\000\007\229\000\000\000\000\000\000\024~\000\000\000\000\000\000\000\000\021*\000\000\000\000\007\229\000\000\000\000\000\000\000\000\007\229\007\229\007\229\000\000\007\229\007\229\000\000\007\229\000\000\000\000\000\000\000\000\000\000\007\229\000\000\000\000\007\229\021.\000\000\000\000\0212\000\000\022R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\229\0216\000\000\021\002\007\229\007\229\021:\000\n\021>\000\000\021B\021F\021\006\021J\021\n\000\000\000\000\000\000\000\000\021N\000\000\021\014\021R\000\000\000\000\000\000\021\018\000\000\022j\021\030\000\000\000\000\000\000\021\"\000\000\000\000\000\000\021V\000\000\021&\021\002\021Z\021^\000\000\000\000\000\000\000\000\000\000\000\000\021\006\000\000\021\n\000\161\000\000\000\000\021*\000\000\000\000\021\014\000\000\000\000\000\000\000\000\021\018\000\000\000\000\021\030\000\000\000\000\000\000\021\"\000\000\000\000\011\234\000\000\000\000\021&\000\000\000\000\000\000\021.\000\000\000\000\0212\000\000\000\000\000\000\011\242\000\000\000\000\000\000\000\000\021*\000\161\000\161\0216\000\000\000\000\000\000\000\000\021:\000\n\021>\000\161\021B\021F\011\250\021J\012\n\000\000\000\000\000\000\000\000\021N\000\000\000\000\021R\021.\000\000\000\000\0212\000\000\020\254\000\000\000\000\000\000\000\000\000\000\000\000\000\161\000\000\021V\0216\000\000\021\002\021Z\021^\021:\000\n\021>\000\000\021B\021F\021\006\021J\021\n\000\000\000\000\000\000\000\000\021N\000\000\021\014\021R\000\000\000\000\000\000\021\018\000\000\020\254\021\030\000\000\000\000\000\000\021\"\000\000\000\000\000\161\021V\000\000\021&\021\002\021Z\021^\012\002\000\000\000\000\000\000\000\000\000\000\021\006\000\000\021\n\000\000\000\000\000\000\023\014\000\161\000\000\021\014\000\000\000\000\000\000\000\000\021\018\000\000\000\000\021\030\000\000\000\000\000\000\021\"\000\161\000\161\000\000\000\000\000\000\021&\000\000\000\000\000\000\021.\000\000\000\000\0212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\022\000\000\000\000\0216\000\000\000\000\000\000\000\000\021:\000\n\021>\000\000\021B\021F\000\000\021J\000\000\000\000\000\000\000\000\000\000\021N\000\000\000\000\021R\021.\000\000\000\000\0212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021V\0216\000\000\000\000\021Z\021^\021:\000\n\021>\000\000\021B\021F\000\000\021J\000\000\000\000\000\000\000\000\000\000\021N\000\000\000\000\021R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021V\000\000\000\000\000\000\021Z\021^\004I\004I\004I\004I\000\000\004I\000\000\004I\004I\000\000\004I\000\000\004I\000\000\004I\000\000\004I\004I\004I\004I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\000\000\000\000\000\000\004I\000\000\000R\000V\000f\000\170\000\000\000\174\000\000\000\178\000\246\000\000\000\254\004I\001\014\000\000\001\022\000\000\001\030\0012\001:\001>\000\000\000\000\000R\000V\000f\000\170\000\000\000\174\000\000\000\178\000\246\004I\000\254\001F\001\014\000\000\001\022\004I\001\030\0012\001:\001>\000\000\000\000\000\000\004I\001N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001F\000\000\000R\000V\000f\000\170\000\000\000\174\000\000\000\178\000\246\001^\000\254\001N\001\014\000\000\001\022\001j\001\030\0012\001:\001>\000\000\000\000\000\000\001b\000\000\000\000\000\000\000\000\000\000\004I\000\000\001^\000\000\001F\000\000\000\000\000\000\001j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001b\001N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\001^\000\000\000\000\000\000\000\000\000\000\004I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001b\000\000\000\000\001n\004R\004V\000\n\000\000\000\000\000\000\000\000\000\000\000R\000V\000f\000\170\000\000\000\174\000\000\000\178\000\246\000\000\000\254\000\000\001\014\001n\001\022\0121\001\030\0012\001:\001>\000\000\000\000\000R\000V\000f\000\170\000\000\000\174\000\000\000\178\000\246\000\000\000\254\001F\001\014\000\000\001\022\002-\001\030\0012\001:\001>\000\000\000\000\000\000\000\000\001N\000\000\004Z\000\000\000\000\000\000\000\000\000\000\000\000\001F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001^\000\000\001N\003Q\000\000\000\000\001j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001b\000\000\000\000\000\000\025\186\004V\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001b\000\000\000\000\000\000\004R\004V\000R\000V\000f\000\170\000\000\000\174\006R\000\178\000\246\006\162\000\254\000\000\001\014\000\n\001\022\000\000\001\030\0012\001:\001>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006Z\000\000\000\000\000\000\002\013\025\190\001F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006b\000\000\000\000\000\000\002\013\001N\006\178\006\186\000\000\000\000\000\000\000\237\003I\004b\000\237\002%\006\130\000\000\000\000\006j\000\000\006z\000\000\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\000\000\006Z\000\000\000\000\000\213\000\237\000\000\000\213\001b\000\000\000\000\006\138\025\186\004V\000\000\006b\000\000\000\000\000\000\000\237\000\000\000\237\000\237\002\013\000\000\000\213\000\000\000\000\000\000\000\213\000\000\006\130\000\000\000\000\006j\000\000\006z\000\000\000\165\006b\000\000\000\000\000\000\000\213\000\000\000\213\000\213\000\000\000\000\006\146\000\000\000\000\002\013\000\000\000\000\000\213\006r\006\138\006j\011\234\006z\000\000\000\205\000\000\000\000\000\205\000\000\000\000\025\198\000\237\000\000\000\000\000\000\011\242\002\013\000\000\000\000\000\000\000\000\000\165\000\165\000\213\000\000\000\205\006\194\006\154\002\013\000\205\000\000\000\165\000\000\000\000\011\250\000\213\012\n\006\146\000\000\000\205\000\237\000\000\000\000\000\205\006r\000\205\000\205\000\000\000\000\000\000\000\209\000\000\000\000\000\209\000\000\000\205\000\000\012\026\006j\000\000\000\205\000\213\000\237\000\000\000\213\000\000\000\000\000\000\006r\000\000\000\000\000\209\000\237\006\154\000\237\000\209\000\000\000\000\000\000\000\000\000\000\000\205\000\173\000\000\000\000\000\209\000\213\000\000\000\000\000\209\000\000\000\209\000\209\000\205\000\000\000\165\000\213\000\213\000\213\000\000\000\000\000\209\012\002\011\234\006j\000\000\000\209\000\225\000\000\000\000\000\225\000\000\000\000\000\000\000\000\000\165\000\000\011\242\000\000\000\205\000\000\000\000\000\205\000\173\000\173\000\000\006r\000\209\006Z\000\000\000\165\000\165\000\225\012\018\000\000\000\000\011\250\000\000\012\n\000\209\000\000\000\000\006b\000\000\000\205\000\000\000\225\000\000\000\225\000\225\000\000\000\000\000\000\000\000\000\205\000\205\000\205\000\000\000\225\012\026\000\000\006j\000\000\006z\000\217\000\209\000\000\000\217\000\209\000\000\000\000\000\000\006r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\138\006Z\000\000\000\000\000\000\000\217\000\209\000\000\000\000\000\000\000\000\000\000\000\225\012\"\000\000\006b\000\209\000\209\000\209\000\217\012\002\000\217\000\217\000\000\000\000\000\000\000\221\000\000\000\000\000\221\000\000\000\217\000\000\000\173\006j\000\000\006z\000\000\000\225\000\000\000\000\000\225\000\000\000\000\000\000\006r\000\000\006Z\000\173\000\173\000\000\000\221\000\000\000\000\000\000\000\000\000\000\000\217\011\226\000\000\000\000\006b\000\000\000\225\000\000\000\221\000\000\000\221\000\221\000\217\000\000\000\000\000\000\000\225\000\225\000\225\000\000\000\221\000\000\011\234\006j\000\000\006z\000\229\000\000\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\000\011\242\000\000\000\217\000\000\000\000\000\217\000\189\012:\000\000\006r\006\138\006Z\000\000\000\000\000\000\000\229\012\018\000\000\000\000\011\250\000\000\012\n\000\221\000\000\000\000\006b\000\000\000\217\000\000\000\229\000\000\000\229\000\229\000\000\000\000\000\000\000\000\000\217\000\217\000\217\000\000\006\130\012\026\000\000\006j\000\000\006z\006R\000\221\000\000\000\245\000\221\000\000\000\000\000\000\006r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\138\006Z\000\000\000\000\000\000\000\245\000\221\000\000\000\000\000\000\000\000\000\000\000\229\012\"\000\000\006b\000\221\000\221\000\221\000\245\012\002\000\245\006\186\000\000\000\000\000\000\006R\000\000\000\000\000\233\000\000\006\130\000\000\000\189\006j\000\000\006z\000\000\006\146\000\000\000\000\000\229\000\000\000\000\000\000\006r\000\000\006Z\012B\012*\000\000\000\233\000\000\000\000\000\000\000\000\000\000\006\138\000\000\000\000\000\000\006b\000\000\000\229\000\000\000\233\000\000\000\233\000\233\000\245\000\000\000\000\000\000\000\229\000\229\000\229\000\000\006\130\000\000\000\000\006j\000\000\006z\006R\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\146\000\000\000\000\000\245\000\000\000\000\000\000\006r\006\138\006Z\000\000\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\233\000\000\013\189\006b\000\000\000\245\000\000\000\241\000\000\000\241\006\186\000\000\000\000\000\000\000\000\006\194\006\154\000\245\000\000\006\130\000\000\000\000\006j\013\189\006z\000\000\006\146\000\000\000\000\000\233\011\030\000\000\000\000\006r\000\000\000\000\000\000\013\189\000\000\000\000\000\000\000\000\000\000\013\189\013\189\006\138\011\226\011&\000\000\000\000\0112\000\233\000\000\013\189\000\000\000\000\013\189\000\241\013\189\000\000\000\000\000\233\006\154\000\233\000\000\000\000\000\000\011\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\189\000\000\011\242\000\000\006\146\000\000\000\000\000\241\000\177\000\177\000\000\006r\000\000\011\226\000\000\000\000\000\000\000\000\012\018\011>\000\000\011\250\000\000\012\n\000\000\000\000\000\000\000\000\000\000\000\241\000\000\000\000\000\000\000\000\011\234\000\000\000\000\000\000\013\189\000\241\006\154\000\241\000\000\011B\012\026\013\189\000\000\000\000\011\242\000\000\000\000\000\000\000\000\011J\000\185\012:\000\000\000\000\013\189\000\000\000\000\000\000\000\000\000\000\012\018\000\000\000\000\011\250\000\000\012\n\000\000\000\000\000\000\013\189\013\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\"\000\000\000\000\000\000\000\000\000\000\000\000\012\002\012\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\012*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\"\000\000\000\000\000\000\000\000\000\000\000\000\012\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185\012*")) let lhs = - (16, "\000\012\000\011\000\n\000\t\000\008\000\007\000\006\000\005\000\004\000\003\000\002\000\001\000\000\001\007\001\007\001\007\001\006\001\006\001\006\001\006\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\001\001\001\001\001\001\001\001\000\000\255\000\255\000\255\000\254\000\254\000\254\000\253\000\253\000\253\000\252\000\252\000\252\000\251\000\250\000\249\000\248\000\248\000\247\000\247\000\246\000\246\000\245\000\245\000\244\000\244\000\243\000\242\000\242\000\241\000\241\000\240\000\240\000\240\000\239\000\239\000\238\000\237\000\236\000\235\000\234\000\233\000\232\000\231\000\230\000\229\000\228\000\227\000\226\000\225\000\225\000\224\000\224\000\223\000\223\000\222\000\222\000\221\000\221\000\221\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\219\000\218\000\218\000\218\000\218\000\217\000\217\000\216\000\216\000\215\000\215\000\214\000\214\000\214\000\213\000\213\000\213\000\212\000\212\000\212\000\212\000\211\000\211\000\211\000\211\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\210\000\209\000\208\000\208\000\207\000\207\000\207\000\206\000\206\000\205\000\205\000\205\000\204\000\204\000\203\000\203\000\203\000\202\000\201\000\200\000\200\000\199\000\199\000\198\000\198\000\197\000\197\000\196\000\196\000\195\000\194\000\193\000\193\000\192\000\192\000\191\000\191\000\191\000\190\000\189\000\188\000\188\000\187\000\186\000\186\000\186\000\186\000\186\000\185\000\185\000\185\000\185\000\184\000\184\000\184\000\184\000\183\000\183\000\183\000\183\000\182\000\181\000\181\000\180\000\180\000\180\000\179\000\178\000\178\000\178\000\178\000\177\000\176\000\176\000\175\000\175\000\174\000\174\000\173\000\173\000\173\000\172\000\172\000\171\000\171\000\171\000\171\000\170\000\170\000\170\000\170\000\169\000\169\000\169\000\169\000\169\000\168\000\167\000\167\000\167\000\166\000\165\000\165\000\164\000\164\000\163\000\163\000\162\000\162\000\161\000\161\000\160\000\160\000\159\000\159\000\159\000\159\000\159\000\159\000\159\000\158\000\157\000\156\000\156\000\155\000\155\000\154\000\154\000\153\000\153\000\152\000\152\000\151\000\151\000\150\000\150\000\149\000\149\000\148\000\148\000\147\000\147\000\146\000\146\000\145\000\145\000\144\000\144\000\143\000\143\000\142\000\142\000\141\000\141\000\140\000\140\000\139\000\139\000\138\000\138\000\137\000\137\000\136\000\136\000\135\000\135\000\134\000\134\000\133\000\133\000\132\000\132\000\131\000\131\000\130\000\130\000\129\000\129\000\128\000\128\000\127\000\127\000~\000~\000}\000}\000|\000|\000{\000z\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000x\000w\000v\000u\000t\000s\000r\000q\000p\000o\000o\000o\000n\000n\000n\000m\000m\000m\000m\000l\000k\000j\000i\000h\000g\000f\000f\000e\000e\000e\000d\000d\000c\000c\000c\000b\000b\000a\000`\000`\000`\000_\000^\000^\000]\000]\000\\\000\\\000[\000[\000Z\000Z\000Y\000Y\000X\000X\000W\000W\000W\000W\000W\000W\000W\000W\000W\000W\000W\000W\000W\000W\000W\000W\000W\000W\000W\000V\000V\000U\000U\000T\000T\000S\000S\000S\000S\000S\000R\000R\000Q\000Q\000Q\000Q\000P\000O\000N\000N\000N\000M\000M\000M\000L\000L\000L\000L\000L\000L\000K\000K\000K\000K\000K\000J\000J\000J\000J\000J\000J\000J\000I\000I\000I\000I\000I\000I\000I\000H\000H\000H\000H\000H\000H\000H\000G\000G\000G\000G\000G\000G\000G\000F\000F\000F\000F\000F\000F\000F\000F\000F\000F\000F\000F\000F\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000D\000D\000D\000D\000D\000D\000D\000D\000D\000D\000D\000D\000D\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000B\000B\000B\000B\000B\000A\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000?\000>\000=\000<\000;\000;\000:\0009\0009\0009\0009\0009\0009\0009\0008\0008\0008\0008\0008\0008\0007\0006\0006\0006\0005\0005\0004\0004\0003\0003\0002\0002\0001\0001\0000\0000\000/\000/\000.\000.\000-\000-\000,\000,\000+\000+\000*\000*\000)\000)\000(\000(\000'\000'\000&\000&\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000$\000$\000$\000#\000#\000#\000#\000\"\000\"\000\"\000\"\000\"\000!\000 \000 \000 \000\031\000\031\000\030\000\029\000\028\000\028\000\028\000\028\000\027\000\027\000\027\000\026\000\026\000\025\000\025\000\025\000\024\000\024\000\024\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\021\000\021\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\016\000\016\000\016\000\016\000\016\000\015\000\015\000\014\000\013\000\013\000\013\000\013\000\013") + (16, "\000\012\000\011\000\n\000\t\000\008\000\007\000\006\000\005\000\004\000\003\000\002\000\001\000\000\001\n\001\n\001\n\001\t\001\t\001\t\001\t\001\008\001\008\001\008\001\008\001\008\001\008\001\008\001\008\001\008\001\008\001\008\001\008\001\008\001\008\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\004\001\004\001\004\001\004\001\003\001\002\001\002\001\002\001\001\001\001\001\001\001\000\001\000\001\000\000\255\000\255\000\255\000\254\000\253\000\252\000\251\000\251\000\250\000\250\000\249\000\249\000\248\000\248\000\247\000\247\000\246\000\245\000\245\000\244\000\244\000\243\000\243\000\243\000\242\000\242\000\241\000\240\000\239\000\238\000\237\000\236\000\235\000\234\000\233\000\232\000\231\000\230\000\229\000\228\000\228\000\227\000\227\000\226\000\226\000\225\000\225\000\224\000\224\000\224\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\222\000\221\000\221\000\221\000\221\000\220\000\220\000\219\000\219\000\218\000\218\000\217\000\217\000\217\000\216\000\216\000\216\000\215\000\215\000\215\000\215\000\214\000\214\000\214\000\214\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\212\000\211\000\211\000\210\000\210\000\210\000\209\000\209\000\208\000\208\000\208\000\207\000\207\000\206\000\206\000\206\000\205\000\204\000\203\000\203\000\202\000\202\000\201\000\201\000\200\000\200\000\199\000\199\000\198\000\197\000\196\000\196\000\195\000\195\000\194\000\194\000\194\000\193\000\192\000\191\000\191\000\190\000\189\000\189\000\189\000\189\000\189\000\188\000\188\000\188\000\188\000\187\000\187\000\187\000\187\000\186\000\186\000\186\000\186\000\185\000\184\000\184\000\183\000\183\000\183\000\182\000\181\000\181\000\181\000\181\000\180\000\179\000\179\000\178\000\178\000\177\000\177\000\176\000\176\000\176\000\176\000\175\000\175\000\174\000\174\000\174\000\174\000\173\000\173\000\173\000\173\000\172\000\172\000\172\000\172\000\172\000\171\000\170\000\170\000\170\000\169\000\168\000\168\000\167\000\167\000\166\000\166\000\165\000\165\000\164\000\164\000\163\000\163\000\162\000\162\000\162\000\162\000\162\000\162\000\162\000\161\000\160\000\159\000\159\000\158\000\158\000\157\000\157\000\156\000\156\000\155\000\155\000\154\000\154\000\153\000\153\000\152\000\152\000\151\000\151\000\150\000\150\000\149\000\149\000\148\000\148\000\147\000\147\000\146\000\146\000\145\000\145\000\144\000\144\000\143\000\143\000\142\000\142\000\141\000\141\000\140\000\140\000\139\000\139\000\138\000\138\000\137\000\137\000\136\000\136\000\135\000\135\000\134\000\134\000\133\000\133\000\132\000\132\000\131\000\131\000\130\000\130\000\129\000\129\000\128\000\127\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000~\000}\000|\000{\000z\000y\000x\000w\000v\000u\000t\000t\000t\000s\000s\000s\000r\000r\000r\000r\000q\000p\000o\000n\000m\000l\000k\000k\000j\000j\000j\000i\000i\000h\000h\000h\000g\000g\000f\000e\000e\000e\000d\000c\000c\000b\000b\000a\000a\000`\000`\000_\000_\000^\000^\000]\000]\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000\\\000[\000[\000Z\000Z\000Y\000Y\000X\000X\000W\000W\000V\000V\000V\000V\000V\000U\000U\000T\000T\000T\000T\000S\000R\000Q\000Q\000Q\000P\000P\000P\000O\000O\000O\000O\000O\000O\000N\000N\000N\000N\000N\000M\000M\000M\000M\000M\000M\000M\000L\000L\000L\000L\000L\000L\000L\000K\000K\000K\000K\000K\000K\000K\000J\000J\000J\000J\000J\000J\000J\000I\000I\000I\000I\000I\000I\000I\000I\000I\000I\000I\000I\000I\000H\000H\000H\000H\000H\000H\000H\000H\000H\000H\000H\000H\000H\000G\000G\000G\000G\000G\000G\000G\000G\000G\000G\000G\000G\000G\000F\000F\000F\000F\000F\000F\000F\000F\000F\000F\000F\000F\000F\000E\000E\000E\000E\000E\000D\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000B\000A\000@\000@\000?\000>\000=\000=\000<\000<\000;\000;\000:\0009\0009\0009\0009\0009\0009\0009\0008\0008\0008\0008\0008\0008\0007\0006\0006\0006\0005\0005\0004\0004\0003\0003\0002\0002\0001\0001\0000\0000\000/\000/\000.\000.\000-\000-\000,\000,\000+\000+\000*\000*\000)\000)\000(\000(\000'\000'\000&\000&\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000$\000$\000$\000#\000#\000#\000#\000\"\000\"\000\"\000\"\000\"\000!\000 \000 \000 \000\031\000\031\000\030\000\029\000\028\000\028\000\028\000\028\000\027\000\027\000\027\000\026\000\026\000\025\000\025\000\025\000\024\000\024\000\024\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\021\000\021\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\016\000\016\000\016\000\016\000\016\000\015\000\015\000\014\000\013\000\013\000\013\000\013\000\013") let goto = - ((16, "\000\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001D\000\000\000\131\000X\000\000\000I\000=\000\000\000\000\000\000\001R\000\000\001^\001\222\000\000\000\000\002P\000\000\002\194\000\000\000\000\000\000\002\244\000\000\003\022\000\000\000\000\000\000\000\000\003\216\000\000\003\224\0046\000\000\000\000\004v\000\000\0056\000\000\000\000\000\000\0064\000\000\006\134\000\000\006\198\000\000\006\212\006\250\000\000\000\000\007@\000\000\007Z\000\000\0009\000\000\000\000\000\000\007\172\000\000\008\002\000\000\000\000\008\004\000\000\008R\000\000\000\000\000\000\008\128\000\000\000\028\008\132\000\222\000\000\000\000\000\000\000\004\000\140\003\250\000\000\000\000\008\154\000\000\004\184\000\000\001\154\001+\008f\000\000\000\000\002\180\000\000\002l\000\000\000\026\023z\000\028\001\158\000\028\005\244\007\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\154\001\158\000\000\000\000\011H\000\000\017\158\000\000\003`\000\000\000\000\000\000\000\000\000\226\000\000 \026\000\000\000\000\000\025\000\000\000V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\004\000\000\021\004\000\000\028\168\000\000$p\000\000(\028\000\000-\232\000\0002>\000\0004\214\000\0005\n\000\0005\030\000\000\013.\000\000\017P\000\000\000\000\000\000\000\000\000\0005\158\000\0005\178\000\0005\208\000\000\n\188\000\000\000\000\019H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\027\008\250\000\000\000\000\t,\000\000\tB\tJ\000\000\000\000\tZ\000\000\tt\000\000\000\000\000\000\t\218\000\000\t\234\000\000\000\000\n\006\000\000\n4\nT\000\000\000\000\n`\000\000\n\130\000\000\000\000\000\000\n\132\000\000\n\134\000\000\n\140\000\000\n\146\n\160\000\000\000\000\n\164\000\000\n\172\000\000\001\160\n\176\000\000\n\178\000\000\n\186\000\000\n\216\000\000\000\000\000\000\n\218\000\000\n\242\012\234\000\000\n\244\000\000\000\192\008(\000\000\001\186\000\000\002h\000\000\000\000\000\158\000\000\000\000\001`\t\022\000\000\000\000\000\000\000\000\003\192\000\000\004\230\000\000\001\190\000\000\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\212\000\000\000\000\000\000\000\000\002\206\000\000\000\000\000\000\000\000\000\000\000\000\000\027\005:\014Z\000\000\n\252\000\000\n\254\0186\000\000\011\002\000\000\000\000\002\202\000\000\000\000\000\000\000\000\000\000\030.\000\000\023\210\000\000\000\000\000\000\005L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016(\000\000\000\000\000\000\000\000\000\000\000\000\005t\007\028\000\000\n\002\000\000\024f\022\216\000\000\000\000\000\000\006\n\000\000 \154\000\000\000\0000\000\000\000\000\000\000\000\0062\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021>\000\000!\234\000\000\000\000\000\000\000\000\000\019\000\000\000\0000\130\000\000\000\000\000\000\004r\002&\000\000\000\000\000\000\000\000\000\000\000\000\006.\000\000\006\160\000\000\t\004\000\000\012B\000\000\013\152\000\000\015\026\000\000\020\000\000\000\022\204\000\000\026\028\000\000\026,\000\000\024&\000\000\000\210\000\000\027\"\000\000\027T\000\000 \176\000\000\000\000\000\000\000\000\000\000\000\1950\162\000\000\000K\000\000\000\000\0005\000\244\000\000\003\134\000\000\000\000\000\000\005f\000\000\000\000\000\000\020\240\000\000\000\000\000\000\000\000\000\000'\158\000\000\000\000\000\000\000\000\000\000\000\000\000\201\000\000\000\000\000\000\011\n\029V\000\000\011\012\000\000\000\000\000\000\000\000\000\000\011\024\000\000\000\000\001\154\002\226\000\000\004\210\000\000\000\000\000\000\003P\000\000\011\230\000\148\011\026\000\000\000\000\011$\000\000\011*\011<\000\000\000\000\011F\000\000\011J\000\000\000\000\000\000\011L\000\000\011N\000\000\000\000\011P\000\000\011V\011X\000\000\000\000\011Z\000\000\011b\000\000\000\000\000\000\011p\000\000\011x\000\000\011\128\000\000\011\130\011\134\000\000\000\000\011\136\000\000\011\138\000\000\006|\011\140\000\000\011\152\000\000\011\154\000\000\011\160\000\000\000\000\000\000\011\168\000\000\004\152\000\000\000\000\011\170 \166\000\000\011\180\000\000\000\000\002\138\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\006~ \188\000\000\011\194\000\000\011\200!J\000\000\011\202\000\000\000\000\012\196\011\212\000\000\000\000\011\216\000\000\011\222\011\228\000\000\000\000\011\230\000\000\011\234\000\000\000\000\000\000\011\236\000\000\011\254\000\000\000\000\012\"\000\000\012(\0120\000\000\000\000\0124\000\000\012:\000\000\000\000\000\000\012<\000\000\012H\000\000\012J\000\000\012\\\012^\000\000\000\000\012d\000\000\012f\000\000\006\176\012t\000\000\012\138\000\000\012\148\000\000\012\150\000\000\000\000\000\000\012\164\000\000\012\166\"\008\000\000\012\168\000\000\000\000\006\184\"\222\000\000\012\172\000\000\012\176#&\000\000\012\178\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\168\000\000$|\000\0000\198\000\000\000\000\003\158\000\000\000\000\004<\002\182\000\000\000\000)0\014\186\000\000\017\024)z\000\000\000\000(f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\250(f\000\000\027\250\000\000\028\222\025\220(h\000\000\028\210\000\000\000\000\000\000\006\234\000\000!<\000\000\000\0001\142\000\000\000\000\000\000\007`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\174\000\0001\178\000\000\000\000\000\000\017\014\000\000\000\000\000\000*\014\000\000\000\000\000\000\000\000\007t\000\000\000\000\000\000\000\000\0206\000\000\000\0004 \000\000\001%\000\000\000\000\000\000\004\228\000\000\007\224\000\000\008\022\000\000\t*\000\000\nN\000\000\012J\000\000\012\242\000\000\013\206\000\000\013\228\000\000\015\192\000\000\016\240\000\000\023\160\000\000\027\156\000\000\000\000\000\000\000\000\000\000).\000\000*(\000\000*X1\248\000\000*\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000K\000\000\000\000\000\000\000\000\000\132\000\000\002\252\000\000\000\000\012X\000\000\000\000\000\000+ \000\000\000\000\000\000\000\000\000\000\026&\000\000\000\000\000\000\000\000+$\000\000\000\000\000\000\000\000\003\198\006\254\000\000+>\000\000\000\000\000\000\000\000\t\214\000\000+\210\000\000\000\000\000\000\000\000\001/\000\000\006\188\000\000\025\248\018\134(\178\000\000\000\000\000\000\022.\000\000\000\000\000\000\000\000\000\000\000\000\029\242(\178\000\000&\234\000\000(<\023\142\000\000\000\000\000\000\007\192\000\000!\238\000\000\000\0002\\\000\000\000\000\000\000\007\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\00048\000\0004\202\000\000\000\000\000\000\004F\000\000\000\000\000\000\000\000\000\000\000\000\005\188\000\000\024J\000\000\027\200\000\000\031D\000\000\"\206\000\000$>\000\000%\156\000\000,\026\000\0003\238\000\0005h\000\000,*\000\000\t\186\000\0005\248\000\0006\002\000\0006\022\000\000)P\000\000\000\000\000\0002|\000\000\000\000\000\000\004\026\000\0002\154\000\000\000\000\000\00032\000\000\000\000\000\234\000\000\024n\000!\004\192\000\000\005\142\000\000\012\198\001\230\007d\000\000\000\000\000\000\000\000\000\000\000\000\000\00038\000\000$\248$*\008\242\000\000\000\000\000\000,H\000\000,\212\000\000,\244\000\000%J%x\000\228\0034\008\252\000\000\000\000\000\000\003\182\000\000\000\000\001\156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0003R\000\000\000\000\000\000\000\000\"\018\000\000%\202\000\000\000\000\000\000\000\000\000\000\000\000\0130\000\000\006\136\000\000\000\000\000\000\025\012\003\218\000\000\025\180\000\000\000\000\t\214\000\000\005\158\000\000\000\000\013\178\000\000\026V\000\000\000\000\"\180\000\000\000\000\000\000\005\028\000\000\000\000\003\\\000\000\000\000 *\000\000\000\000\000\000,\248\000\000\000\000\000\000!V\000\000\000\000\000\000\000\000-\030\000\000\000\000\000\000\000\000\004\176\np\000\000-\"\000\000\000\000\000\000\000\000\000\000\000\000\014\196\000\000\000\000\006\018\000\000\015@\000\000\005\028\000\000\000\000\004\146'\230\000\000\006\026\000\000\000\000\000\000\000\000\004F\000\000&F\000\000\026\160\005\200\027>\000\000\005\224\000\000\015\170\000\000\016R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006J\027\234\005B\028\136\000\000\000\000\000\000\007\156\000\000\0176\000\000\006\184\000\000\000\000\008\024\000\028\0290\000\000\000\200\000\000\017\160\029\210\000\000\000\000\018H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\026\008\006\000\000\007\158\000\000\000\000\000\000\000\000\007~\000\000\019.\000\000\000\000\000\000\00423\234\000\000\000\000\000\000 \008\000\000\000\000\000\000\000\000\006\218\003\138\000\000\000\000-\220\000\000\000\000\000\144\000\000\005\240\000\000\000\000#\162\000\000\000\000\000\000.\018\000\000\000\000\000\000\000\000.(\000\000\000\000\006\190\006\206\000\000\000\000.\176\000\000\000\000\008~\"\138\000\000\008\150\000\000\000\000.\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000#f\000\000\000\000\000\000\0005\000\000\000\000\008\214\000\000\000\000$\238\000\000\000\000\000\000.\230\000\000\000\000\000\000\000\000.\254\000\000\000\000\007\008\t\132\000\000\000\000/\150\000\000\000\000\008\194\000\000\000\000\000\000\000\000\004F\0005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\000\000\019\152\000\000\000\000\000\0004\018\000\000\008\174\000\000\000\000\000\000\005\224\000\000\006\142\000\000\000\000\004\228\020x\000\000\021$\000\000\000\000\000\000\004\236\000\000\016B\005\244\029\152\000\000\030\128\000\000\000\000\000\000\006T\000\000&\152\008D'\024\000\000'j\000\000\000\000\000\000\008\128\000\000\031\188\t\000\000\000\000\000\nf\t<\020,\000\000\024\222\000\000\000\000\000\000\tv\000\000 \240\tz\000\000\000\000\000\000\0002\000\000\000\000\000\000\0008\000\000\000\000\000\000\000\000\000\000\000\000\013j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#\000\000\000\000\004\148\000\000\000\000\013t\000\000\000\000\000\000\000\000\008P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013|\000\000\000\000\013^\000\000\008d\000\000\000\000\002p\000\000\002\014\013\024\000A\000\000\000\000\004F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\012\003J\000\000\000\000\0002\000\000\000\000\000\000\003T\000\000\000\000\007\026\t|\000\000\000\000\000\000\000\000\011\248\012\218\000\214\000\000\013D\000\000\000\000\000\000\000\000\000\000\000\000\000\156\000\000\000\000\004\202\000\000\000\000\012\224\000\000\000\000\007H\000\000\000\000\011x\000\000\002^\013\150\002\250\000\000\000\000\n\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\130\0140\000\000\000\000\000\000\000\000\016\236\000\000\000\000\n\152\000\000\000\000\012\190\000\000\000\000\006\140\018,\006`\000\000\018\228\000\000\000\000\000\000\000\000\013b\000\000\000\000\000\000\t&\000\000\002r\008D\005\156\000\000\000\000\000\000\000\000\000U\000\000\000\000\000\000\000\000\000\000\000\000\012r\000\000\000\000\n\170\000\000\007\132\013\172\007v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\204\000\000\000\000\016\222\019\208\000\000\000\000\000\000\000\000\003n\000\000\013j\011\168\000\000\015&\000\000\000\000\000\000\000\000\000\000\000D\015X\000\000\000\000\016L\000\000\000\000\000\000\000\000\n|\000\000\019\144\000\000\000\000\000\000\000\000\007\252\000\000\000\000\000\000\000c\000\000\000\000\001\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000/\188\000\000\000\000\000\000\000\209\000\000\000\000\000\000\000\000\000\000\000\018\011\240\013H\017\178\000\000\000\132\001\226\001\248\005,\000\000\000\000\000\000\000\000\000\000\000\000\006\172\021\208\000\000\030\028\008\200\000\000\000\000\tj\000\000\022|\000\000\027\022\000\000\000\000\008:\023$\000\000\030\186\000\000\t&\031f\000\000\000\000\000\000\004V\000\132\000\000\000\000\000\000\000\000\005\178\000\000\t\202\000\000\008\224\t\240\000\000\000\000\000\000\003\192\000\000\004\230\000\000\t\138\000\000\000\000\014B\000\000\000\000\000\000\000\000\tP\000\000\000\000\t\240\000\000\023\194\000\000\008\024\013p\000\000\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\000\000\000\000\000/\242\000\000\000\127\000\000\000\000\000\000\000\000\000\000\001j\000\000\t\248\000\172\n\160\000\000\002^\011>\000\000\002\022\000\000\003p\000\000\003\232\000\000\004d\000\000\008\024\000\000\000\000\000\000\000\000\000\000\0052\000\000\t\162\000\000\006\026\000\000\008\024\013\190\000\000\004F\000\000\013\194\012\178\000\000\008X\000\000\t\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nD\000\000\n|\000\000\000\000\000\000\000\000\000\000\000\000\013\210\000\000\000\000\012\226\000\000\000\000\012\198\t\236\013\250\000\000\014\006\000\000\000\000\t\192\n\190\000\000\012\246\000\000\000\000\0130\000\000\000\000\000\000\000\000\000\000\000\000\014\006\000\000\000\000\000\000\013\030\013\008\n,\n\\\013&\013^\000\000\000\000\013\030\nX\n\136\013<\013z\000\000\000\000\011$\000\000\000\000\000\000\000\000\014D\000\000\000\000"), (16, "\003f\003}\004\254\002\240\000\132\001\206\0060\005\225\000\143\0061\001\180\006\134\006\135\003#\006\142\000Y\005v\006\143\0011\002\158\004S\004;\0020\005\222\005V\003f\003}\0065\000D\001a\000\132\001\197\006Z\000Y\000\141\000\006\001\217\000D\006[\0034\000Y\0022\005T\001\182\006\\\000Y\004\012\005W\005b\004\013\004t\003h\001<\000\134\001\208\003i\006\005\002\239\000\135\000\132\000\t\000\n\000\136\000\143\006\139\0027\0023\000a\006\147\005S\001\180\005\136\006!\006\"\004\013\000Y\003h\005\232\000\134\000\134\003i\001c\001\186\006.\000\135\001d\000\145\005T\000\136\005\134\005b\005w\005W\005b\0054\005\233\002.\005\000\005\236\005b\004\130\006=\003\130\001\181\001\175\0027\005c\001\207\000\134\000Y\000Y\001q\000\145\000\135\004~\001\188\002\160\000\136\006^\000\018\006.\001a\006\151\001b\006.\000\017\001\134\000Y\006\013\005\160\001\007\0034\005\223\001\173\001\175\000D\004t\0034\000b\006_\003\247\000\145\000Y\000[\001\219\000_\005g\000E\005c\000b\003v\005c\004(\000Y\000Y\003\252\001\207\005c\006\016\003\253\004\014\000a\003w\004\132\004a\003\247\000\146\001\028\006\166\004\240\000\134\005\151\005b\001c\004O\003v\000a\001d\000D\000D\003\252\001\021\003$\005h\003\253\004\014\006`\003w\000\147\001\135\004\001\001r\000\146\004\218\004<\006a\004[\003f\003}\006z\004w\004\022\005z\001q\004r\004\245\0043\003\134\005i\001\177\006\148\001\028\000Y\000\148\000\147\004\001\006\\\006\149\004\012\004\017\006|\000\146\001\t\000\132\0010\001\021\004\022\000\141\003\135\006~\005c\0043\003\134\003\136\001\183\000\149\000\197\003\137\000Y\000\177\000\188\000b\003\138\000\147\0035\001\211\004\013\000b\003h\000\151\0035\006A\003i\003\135\000Y\005d\002B\006\168\003\136\003f\003}\000\149\003\137\006\019\001\223\000\178\000\197\003\138\000\148\000\179\000D\000D\000\134\000D\000Y\000\151\006=\000\135\002\158\004S\004;\000\136\005i\001r\006\005\003:\000D\006=\000\138\003\228\000\149\004\175\001\031\0027\001+\000\150\002B\001\022\005\161\001\023\000\197\000\197\003>\006\151\000\151\000\145\006\169\001\006\004\013\000\011\003h\001\028\006&\006'\003i\005\164\001\t\001?\0010\003f\003}\003\231\003\232\003\234\000\021\001\021\001a\001(\001x\001\166\000\025\001\t\006+\0010\000Y\000\n\001\030\003\247\006\\\006\154\004;\001\022\001\185\001\023\000\197\000\197\0020\003v\006\011\006\157\001\139\001\228\003\252\005}\005r\004\241\003\253\004\014\006\170\003w\004b\003\130\000\132\001\175\001\142\0024\001\203\006a\004\013\001\230\003h\006\172\005p\000D\003i\000\134\005s\005b\001c\004\243\000b\003\228\001d\000\245\006\165\000\146\006\021\004\001\006.\005~\0023\004\017\006\174\000Y\000\024\005\183\000b\002\160\004\022\003\247\000Y\006\176\001N\0043\003\134\001}\005\229\000\147\001q\003v\001\137\000\134\000D\003\230\003\252\004\243\000\135\001)\003\253\004\014\000\136\003w\000D\004d\001\209\003\135\006@\001\189\005\176\000\197\003\136\005\184\000\177\004O\003\137\005c\001\031\006?\001 \003\138\001.\001\022\005\230\001\023\000\145\000\197\005\177\000D\000\132\004\001\001\028\000\027\000\133\004<\000\149\004[\003f\003}\000\178\003\247\004\022\006\005\000\179\004r\001\021\0043\003\134\005\133\000\151\003v\0027\000Y\005\133\001\135\003\252\006\\\006\154\004;\003\253\004\014\006\160\003w\005\232\000b\002B\005\134\005b\003\135\001r\006a\005\134\005b\003\136\003\255\000Y\000D\003\137\000\134\002\158\001\198\005\233\003\138\000\135\005\236\005b\004\013\000\136\003h\000\029\004\001\001*\003i\001\128\004<\0011\006\162\003f\003}\000D\004\t\004\022\006\159\000b\006\164\000\146\0043\003\134\001\012\003H\004\n\000\145\000Y\000b\000!\001\138\006\\\006\154\004;\003\191\003\192\000Y\000[\000\\\000_\005c\000D\000\147\003\135\003A\005c\000#\0025\003\136\003f\003}\001\139\003\137\000b\003\225\001\186\001\140\003\138\005c\006\006\001\141\004\013\002\161\003h\000Y\001\142\001\231\003i\004\156\000Y\000a\001\031\001=\001%\003f\003}\001\022\006\161\001\023\003%\000\197\001a\000Y\001x\001\230\001\225\0068\000\197\001\187\000Y\004\237\005y\003\247\006\\\006\154\004;\001)\003*\004\190\006\233\003h\000b\003v\002\159\003i\003\226\000\146\003\252\006\234\003O\005\180\003\253\004\014\006\160\003w\000Y\002\159\003\191\003\192\003\227\004\196\005^\006a\004\013\000b\003h\003\255\0011\000\147\003i\000\134\000Y\000`\001c\000_\004\014\005_\001d\002\187\006\163\000Y\002\191\004\001\000(\000Y\004\031\004<\000,\006\162\005\137\001\180\001'\003\247\004\022\005\140\004\246\006\164\002B\0043\003\134\005\163\0044\003v\001q\006\t\000a\005w\003\252\004\158\005\002\003\226\003\253\004\014\006\160\003w\001K\004\022\003f\003}\004\027\003\135\0043\006a\003\133\004J\003\136\003\255\000\134\000D\003\137\000+\002\192\000Y\006=\003\138\002\193\006\\\006\154\004;\003v\002\160\001\006\004\001\000\132\002&\004g\004<\000\133\006\162\004\197\001a\003w\001v\004\022\003\247\0034\006\164\004L\0043\003\134\003\191\003\192\000.\004\198\003v\001\t\004\013\0010\003h\003\252\000D\006\242\003i\003\253\004\014\006\160\003w\0069\003\194\000D\003\135\004\016\006\171\001r\006a\003\136\003f\003g\003\255\003\137\004\200\004\n\000\134\004\205\003\138\004\223\003\134\000\135\003'\000\134\003@\000\136\001c\005\221\004\001\005\n\001d\001\136\004<\005\013\006\162\006]\004U\003@\001a\004\022\001x\003\135\006\164\005\222\0043\003\134\003\136\005\012\004U\000\145\003\137\005\012\002\206\001\138\000\134\003\138\001q\003f\003}\000\134\001\006\003h\001\"\004A\002\207\003i\003\135\001a\001\183\001b\000\197\003\136\000Y\004\n\001\139\003\137\006\\\006\154\004;\001\140\003\138\003\247\0000\001\141\001\t\000D\0010\000\134\001\142\000b\001c\003v\004(\005\161\001d\000\197\003\252\001\227\000D\000\197\003\253\004\014\006\160\003w\0016\003\193\004\013\006>\003h\003\191\003\192\006a\003i\001I\004i\003\255\000\134\001}\000D\001c\001q\000\132\006\175\001d\001a\001P\001b\003\191\003\192\000\146\000Y\004\001\002\241\004-\002\158\004<\001r\006\162\003f\003}\005\205\005b\004\022\005\213\004J\006\164\002\244\0043\003\134\001q\0041\000\147\005\223\000Y\0011\000D\000D\002\158\004S\004;\003v\005\214\005\217\005b\003H\005\001\005\020\006c\000Y\003\135\000\134\004o\003w\000\134\003\136\000\135\001c\004K\003\137\000\136\001d\000D\004]\003\138\005\022\000D\000\132\004\013\004\181\003h\000\141\0011\005\231\003i\004X\000b\000D\003\247\001\191\005c\001r\000Y\004\157\000\145\004q\002\160\001q\003v\001f\0004\000D\001~\003\252\005\226\005\023\005\133\003\253\004\014\006\160\003w\000D\005c\003f\003}\001\128\004\224\004o\006a\001o\001r\004\004\003\255\005\022\005\134\005b\000\134\005\169\000Y\003\135\004\166\000\135\002\158\004S\004;\000\136\004\141\001\138\004\001\006E\005\003\0006\004<\003\140\006\162\005\170\004\n\005\173\005b\004\022\004p\005\000\006\164\005\176\0043\003\134\002\025\002<\001\139\000\145\000D\004g\004\013\001\140\003h\004\135\004\014\001\141\003i\003\247\000D\005\177\001\142\0008\000\146\002\187\003\135\001r\002\191\003v\000<\003\136\002r\005c\003\252\003\137\002\137\001\139\003\253\004\014\003\138\003w\004\249\004a\003f\003}\000\147\000b\004\137\000;\005\002\001\144\002\187\003\255\005\242\002\191\005c\004\022\000D\000Y\004\027\002\195\0043\002\158\004S\004;\000D\003\191\003\192\004\001\005\246\000b\006=\004<\000\134\004[\000Y\001\008\002\192\000_\004\022\004\135\002\193\004\027\000>\0043\003\134\002\160\006\029\000\146\005\243\004\182\000\132\004\013\001\139\003h\000\141\000@\004\163\003i\004\180\000\134\0034\003\247\005a\002\192\001Q\003\135\001\146\002\193\000a\000\147\003\136\003v\004\136\003B\003\137\005o\003\252\005_\002\204\003\138\003\253\004\014\005\222\003w\004_\004a\003f\003}\002\230\001S\003F\000\197\005\169\005p\000\177\003\255\000F\005s\005b\000\134\005\146\000Y\006\193\001\186\000\135\002\158\004S\004;\000\136\006I\005\170\004\001\005\173\005b\004l\004<\000\149\004[\001\204\004\n\000\178\005\185\004\022\000D\000\179\004\027\003k\0043\003\134\001a\000\151\001b\000\145\002\206\003t\004\013\001\188\003h\006\031\000H\000K\003i\003\247\003\191\003\192\002\207\006S\005\239\002\187\003\135\004\230\002\191\003v\000Y\003\136\000D\005c\003\252\003\137\005\030\002\206\003\253\004\014\003\138\003w\004\134\004a\003f\003}\000D\000b\005c\002\207\004(\000D\005\216\003\255\005 \000\134\000M\006A\001c\000Y\004\232\004\230\001d\002\158\004S\004;\005!\006L\005\228\004\001\005\214\005\217\005b\004<\000\134\004[\001\006\004\n\002\192\000Q\004\022\001\222\002\193\004\027\005 \0043\003\134\001\020\001q\000\146\002\241\004-\000^\004\013\004\231\003h\005\133\003f\003g\003i\001\t\001\021\0010\003\247\002\246\006\151\000\176\003\135\0041\006\200\000b\000\147\003\136\003v\005\134\005b\003\137\002\241\003\252\000D\000Y\003\138\003\253\004\014\006n\003w\004\253\004a\003f\003}\005c\002\248\005$\001a\006{\001u\000\177\003\255\005\127\000Y\000\199\006X\000b\000Y\004\n\002\160\000\134\006\\\003h\004\012\005\022\006\173\003i\004\001\004\191\005\191\003\209\004<\000\149\004[\000D\003\224\000\178\005,\004\022\000\202\000\179\004\027\001r\0043\003\134\002\187\000\151\005c\002\191\002\206\000\206\004\013\006q\003h\000\205\005.\000\134\003i\003\247\001c\004\209\002\207\000\208\001d\006\193\003\135\005/\0052\003v\006\167\003\136\006i\000Y\003\252\003\137\000\210\002\158\003\253\004\014\003\138\003w\006x\004a\006p\005.\005\022\003f\003}\006o\001q\006\220\001\022\003\255\001\023\000\134\000\197\002\160\005\213\002\192\006\193\000\132\000Y\002\193\000b\000\143\006\\\003H\004\012\004\001\001\139\005\169\000D\004<\006\217\004[\005\214\005\217\005b\005\235\004\022\005\179\003v\004\027\001\148\0043\003\134\000\214\006\193\005\170\002\241\005\173\005b\006\219\003w\000\216\004\013\005\233\003h\005\177\005\236\005b\003i\003\247\002\250\000b\006\237\003\135\004\225\000\219\000\134\005\177\003\136\003v\006\152\000\135\003\137\005\144\003\252\000\136\006\227\003\138\003\253\004\014\006\153\003w\003f\003}\006\244\006\238\001r\000\132\000\223\006a\006o\001M\005c\006\156\006t\003\162\006u\000Y\006j\000\145\006k\006\\\000\197\004\012\000\222\003I\005c\006\245\006\250\004\001\000\225\006\194\002\206\004\017\006\158\005c\003\135\006j\006\251\006k\004\022\000\197\003M\006\164\002\207\0043\003\134\000\227\000\231\000\233\003\138\004\013\000\235\003h\004\014\000\239\000\134\003i\000b\005\172\006\228\000\135\000\238\003\247\000\241\000\136\006\196\003\135\000\243\006\155\000\246\000\248\003\136\003v\006\227\000\250\003\137\005\170\003\252\005\173\005b\003\138\003\253\004\014\006\153\003w\003f\003}\005'\000\145\000\252\001\000\006\228\006a\006\198\004\022\006\227\006\156\004\027\000\146\0043\000Y\0045\001@\001\005\002\158\000Y\004\012\0015\001;\0068\001:\002\241\004\001\006\228\001\216\001\215\004\017\006\158\0049\006\026\000\147\001\221\001\235\004\022\005\133\002\252\006\164\001\238\0043\003\134\001\242\001a\005\197\001b\004\013\002\187\003h\005c\002\191\001\241\003i\003\247\005\134\005b\001\244\000\148\001\246\001\250\001\252\001\255\003\135\003v\002\003\002\002\002\005\003\136\003\252\000Y\002\007\003\137\003\253\004\014\006\153\003w\003\138\002\011\005\005\000\149\000\146\002\013\004\129\006a\000\187\002\015\002\019\006\156\002\018\002\021\002\023\002\026\000\134\000\151\005\232\001c\000\134\002\028\002\030\001d\002\192\002 \000\147\004\001\002\193\002$\002-\004\017\006\158\003f\003}\002,\005\233\005c\004\022\005\236\005b\006\164\002;\0043\003\134\002A\002@\002\132\000Y\001q\001\028\002D\002\158\002G\004\012\002\187\002K\005\169\002\191\002J\002M\003\247\002O\002S\001\021\003\135\000Y\000[\001\003\000_\003\136\003v\002U\005\133\003\137\005\170\003\252\005\173\005b\003\138\003\253\004\014\004\013\003w\003h\000\132\003f\003}\003i\000\141\002X\005\134\005b\002\\\004\005\004v\006C\002[\005c\002^\000a\000Y\002`\002d\000\134\002\158\004\007\004\012\002\192\002f\002h\004\001\002\193\000Y\004\127\004\017\004x\0068\004\129\002l\002k\002\206\004\022\002n\002p\004\027\005\133\0043\003\134\001r\006:\002s\000\197\002\207\000\134\004\013\005c\003h\001a\000\135\001b\003i\002u\000\136\005\134\005b\005\157\002w\002y\003\135\005c\003f\003}\000\173\003\136\002}\002\131\002\130\003\137\002\136\004\019\002\142\002\141\003\138\005A\002\187\000Y\000\145\002\191\005\\\002\158\004\020\004;\003\247\005\131\001\031\002\187\003-\005n\002\191\001\022\005|\001\023\003v\000\197\005\166\005\182\000\134\003\252\005\212\001c\005\232\003\253\004\014\001d\003w\001\139\005\241\006\132\006\178\004\013\002\241\003h\005c\005\244\002\206\003i\004v\006\182\005\233\001\150\006\201\005\236\005b\000\134\002\254\006\205\002\207\002\192\006\210\001q\006\211\002\193\004\001\006\216\000\134\003\247\004\017\004x\002\192\006\215\001\006\006\223\002\193\004\022\006\225\003v\004\027\000Y\0043\003\134\003\252\006\231\005\200\005\133\003\253\004\014\000\146\003w\006\235\000Y\000[\0013\000_\006\236\001\t\006\239\0010\006\240\005\155\004@\003\135\005\134\005b\000\176\006\243\003\136\006\246\006B\000\147\003\137\005c\006\247\006\255\000\000\003\138\004\001\000\000\000\000\000\000\004\017\004B\000\000\002\187\000a\002\241\002\191\004\022\003f\003}\004D\003\247\0043\003\134\000\177\000\000\006q\004>\000\000\003\000\001r\003v\006:\000Y\000\197\000\000\003\252\002\158\004\020\004;\003\253\004\014\005\153\003w\003\135\002\206\000\149\000\000\000\000\003\136\000\178\005c\000\000\003\137\000\179\003\255\002\206\002\207\003\138\000\000\000\151\001a\002\232\001b\000\000\000\000\002\192\004\013\002\207\003h\002\193\004\001\000\000\003i\000\000\004<\000\000\004=\000\000\000\000\003f\003}\004\022\000\000\000\000\004\027\000\000\0043\003\134\004C\000\000\000\000\000\000\000\000\005\232\000Y\000\000\001\139\000\000\002\158\004\020\004;\000\000\000\000\000\000\000\000\000\000\005\249\000\000\003\135\000\134\001\152\005\233\001c\003\136\005\236\005b\001d\003\137\005\232\000\000\000\000\000\000\003\138\000\000\002\241\000\000\000\000\000\000\004\013\000\000\003h\000\000\003f\003}\003i\002\241\005\233\000\000\003\002\005\236\005b\000\000\001q\002\187\001\006\002\233\002\191\000Y\000\000\003\004\006s\002\158\004S\004;\006j\000\000\006k\003\247\000\197\005\189\000\000\000\000\002\206\003\013\003\030\003\016\000\000\003v\001\t\000\000\0010\002\236\003\252\005c\002\207\000\000\003\253\004\014\000\000\003w\000\000\004\013\000\000\003h\000\000\000\000\000\000\003i\000\000\000\000\000\000\003\255\000\134\003\019\000\000\001a\002\192\001b\005c\002\239\002\193\000\000\000\000\000\000\000\000\000\000\000\000\004\001\001a\000\000\001x\004<\000\000\004=\000\000\000\000\003f\003}\004\022\003\247\000\000\004\027\001r\0043\003\134\000\000\000\000\000\000\000\000\003v\000\000\000Y\000\000\000\000\003\252\002\158\004S\004;\003\253\004\014\005\232\003w\002\241\000\000\000\134\003\135\000\000\001c\000\000\000\000\003\136\001d\000\000\003\255\003\137\000\000\002\242\000\134\005\233\003\138\001c\005\236\005b\000\000\001d\004\013\000\000\003h\000\000\004\001\000\000\003i\003\247\004<\000\000\004=\000\000\001q\000\000\006\007\004\022\000\000\003v\004\027\000\000\0043\003\134\003\252\000\000\001\139\001q\003\253\004\014\002\206\003w\002\187\004Z\000\000\002\191\000\000\000\000\000\000\000\000\001\154\006\014\002\207\003\255\003\135\000\000\000\000\002\187\000\000\003\136\002\191\005\169\002\187\003\137\000\000\002\213\000\000\005c\003\138\004\001\005\133\000\000\000\000\004<\000\000\004[\000\000\003f\003}\005\170\004\022\005\173\005b\004\027\000\000\0043\003\134\000\000\005\134\005b\000\132\000\134\000Y\000\000\000\133\002\192\002\158\004S\004;\002\193\000\000\000\000\000\000\003\247\001r\000\000\002\232\003\135\000\000\000\000\002\192\000\134\003\136\003v\002\193\002\192\003\137\001r\003\252\002\193\002\241\003\138\003\253\004\014\000\000\003w\004\013\004\\\003h\000\132\003f\003}\003i\001L\003\006\000\000\000\000\003\255\000\000\000\134\005c\005\015\000\000\000\000\000\135\000Y\000\000\005c\000\136\002\158\004y\004;\000\000\004\001\000Y\000\000\000\000\004<\0068\004[\000\000\000\000\000\000\001\138\004\022\000\000\000\000\004\027\000\000\0043\003\134\001w\000\145\006\017\000\000\000\000\000\000\000\000\000\134\004\013\000\000\003h\000\000\000\135\001\139\003i\000\000\000\136\000\000\001\140\002\233\003\135\002\206\001\141\000\000\000\000\003\136\000\000\001\142\000\000\003\137\000\000\000\000\000\000\002\207\003\138\000\000\002\206\003\013\003\014\003\016\000\145\002\206\004{\003f\003}\002\236\003\247\000\000\002\207\000Y\000[\0018\000_\002\207\000\000\000\000\003v\000\000\000Y\005\133\000\000\003\252\002\158\004y\004;\003\253\004\014\003\019\003w\000\000\004n\000\000\000\000\002\239\003f\003}\005\255\005\134\005b\000\000\003\255\000\146\000\000\000a\000\000\005\194\000\000\000\000\000\000\000\000\000\000\000\000\004\013\000\000\003h\000\000\004\001\000\000\003i\003\247\004<\002\241\004[\000\147\000\000\000\000\000\000\004\022\000\000\003v\004\027\000\000\0043\003\134\003\252\003\008\002\241\000\000\003\253\004\014\000\146\003w\000\000\000\134\000\000\003h\004}\000\000\000\175\003i\002\242\000\000\002\187\003\255\003\135\002\212\005c\000\132\0069\003\136\000\000\000\133\000\147\003\137\000\000\000\000\000\000\000\000\003\138\004\001\000\149\005\133\000\000\004<\000\000\004|\000\000\000\000\003f\003}\004\022\000\000\000\000\004\027\000\151\0043\003\134\004\143\000\000\005\134\005b\000\132\006:\000Y\000\197\000\143\003\130\002\158\004\020\004;\000\000\000\134\000\000\003\247\000\000\002\192\000\134\003\135\000\000\002\193\000\000\000\135\003\136\003v\000\000\000\136\003\137\000\000\003\252\000\000\000\000\003\138\003\253\004\014\000\000\003w\000\000\004\013\000\000\003h\000\000\003f\003}\003i\001\006\000\000\000\000\003\255\000\000\000\145\000\134\000\000\000\000\000\000\003v\000\135\000Y\000\000\005c\000\136\002\158\000\000\004\012\004\001\005\232\000\000\003w\004<\001\t\004|\0010\000\000\000\000\000\000\004\022\005\209\000\000\004\027\003\132\0043\003\134\000\000\005\233\000\145\000\000\005\236\005b\000\000\000\000\000\000\004\013\000\000\003h\001a\000\000\001b\003i\000\000\000\000\005\133\000\000\003\135\000\000\000\000\000\000\000\000\003\136\000\000\000\000\000\000\003\137\003\134\002\206\000\000\000\000\003\138\000\000\005\134\005b\000\000\002\187\000\000\004\247\002\191\002\207\000\000\004\129\000\000\003\247\000\146\000Y\000\000\003\135\000\000\002\158\000\000\000\000\003\136\003v\000\000\000\000\003\137\000\134\003\252\005c\001c\003\138\003\253\004\014\001d\003w\000\147\000\000\003f\003}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\000\146\003H\000\000\000\000\005\207\000Y\002\232\000\000\000\000\002\158\002\192\004\012\001q\005c\002\193\004\001\000\000\000\000\003\247\004<\000\000\004=\000\147\000\000\000\000\000\000\004\022\000\000\003v\004\027\000\000\0043\003\134\003\252\000\000\000\149\000\000\003\253\004\014\004\013\003w\003h\000\000\000\000\000\000\003i\000\000\000\148\000\000\000\153\000\132\000\000\004v\003\135\000\141\000\000\000\000\000\000\003\136\000\000\000\132\000\000\003\137\000\000\000\133\000Y\000\000\003\138\004\001\000\149\000\000\005\007\004\017\004x\000\190\004\129\003f\003}\000\000\004\022\000\000\000\000\004\027\000\151\0043\003\134\000\000\006\024\000\000\000\132\002\233\000Y\001r\000\143\000\000\002\158\000\000\004\012\000\000\000\134\000\000\000\000\000\000\000\000\000\135\000\000\003\135\002\206\000\136\000\134\002\235\003\136\004\014\000\000\000\135\003\137\002\236\000\000\000\136\002\207\003\138\000\000\005\253\000\000\000\000\004\013\000\000\003h\000\000\000\000\003\247\003i\000\145\000\000\000\000\000\000\000\000\000\000\000\134\000\000\003v\000\000\000\145\000\135\002\239\003\252\005)\000\136\000\000\003\253\004\014\000\000\003w\004\022\000\000\000\000\004\027\005\t\0043\001\139\000\000\004\129\003f\003}\004v\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\001\156\000\000\000\000\000\000\000Y\000\000\000\000\004\001\002\158\000\000\004\012\004\017\004x\000\000\002\241\000\000\000\000\000\000\004\022\000\000\000\000\004\027\000\000\0043\003\134\000\000\000\000\000\000\002\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003f\003g\004\013\000\146\003h\000\000\000\000\003\247\003i\003\135\000\000\000\000\000\000\000\146\003\136\000\000\000\000\003v\003\137\000\000\001Q\000\000\003\252\003\138\000\000\000\147\003\253\004\014\000\000\003w\000\000\000\000\000\000\000\000\006F\000\147\000\000\000\000\004\129\003f\003}\004v\000\146\000\000\000\000\001\195\000\000\000\197\006N\000\134\000\177\003h\000\000\000\000\000Y\003i\000\000\004\001\002\158\004\020\004;\004\017\004x\000\000\000\147\000\000\000\000\000\000\004\022\000\000\000\000\004\027\000\149\0043\003\134\000\000\000\178\000\000\000\000\001a\000\179\001b\000\149\000\000\000\000\001a\000\151\001b\004\013\000\148\003h\000\000\000\000\003\247\003i\003\135\000\155\000\000\000\000\000\000\003\136\000\000\000\000\003v\003\137\000\000\000\000\000\000\003\252\003\138\000\000\000\149\003\253\004\014\000\000\003w\001z\000\000\000\000\000\000\000\000\000\000\000\000\003f\003}\000\151\000\000\004v\000\134\000\000\000\000\001c\000\000\000\000\000\134\001d\000\000\001c\000Y\000\000\000\000\001d\002\158\004\001\004\012\000\000\000\000\004\017\004x\000\000\003v\000\000\000\000\000\000\004\022\000\000\000\000\004\027\000\000\0043\003\134\001q\003w\000\000\000\000\000\000\000\132\001q\000\000\000\000\000\141\000\000\004\013\000\000\003h\000\000\003f\003g\003i\003\247\000\000\003\135\000\000\000\000\000\000\002\187\003\136\000\000\002\191\003v\003\137\000\000\000\000\000\000\003\252\003\138\000\000\000\000\003\253\004\014\000\000\003w\003f\003}\006T\000\000\000\000\000\000\004\129\000\000\000\132\006}\000\000\003\255\000\141\000\134\000\000\000Y\000\000\000\000\000\135\002\158\004\020\004;\000\136\000\134\000\000\003h\003|\004\001\000\000\003i\000\000\004<\000\134\004=\000\000\000\000\002\192\000\000\004\022\001r\002\193\004\027\000\000\0043\003\134\001r\000\145\000\000\000\000\004\013\000\132\003h\000\000\000\000\000\141\003i\000\000\000\134\000\000\000\000\000\000\003\247\000\135\000\000\000\000\003\135\000\136\001\192\003f\003g\003\136\003v\000\000\000\000\003\137\000\000\003\252\000\000\000\000\003\138\003\253\004\014\001a\003w\001t\004\138\003f\003}\000\000\000\000\000\145\000\000\000\000\000\000\000\000\004v\000\000\000\000\000\000\000\134\000\000\000Y\000\000\000\000\000\135\002\158\001\139\004;\000\136\000\000\000\000\004\001\001s\000\000\000\000\004\017\004x\000\134\001\164\003h\001\158\000\000\004\022\003i\003v\004\027\000\146\0043\003\134\000\000\000\000\000\134\000\145\002\206\001c\004\013\003w\003h\001d\000\000\003\247\003i\000\000\001\177\000\000\002\207\000\000\000\000\000\147\003\135\003v\000\000\000\000\000\000\003\136\003\252\000\000\000Y\003\137\003\253\004\014\002\158\003w\003\138\001q\003f\003}\000\000\000\000\000\000\000\146\000\000\000\000\000\177\003\255\000\000\000\000\004?\000\000\000\000\000Y\000\000\000\000\000\000\002\158\000\000\004\012\001E\000\000\000\000\004\001\003H\000\147\000\000\004<\000\149\004=\000\000\000\000\000\178\000\000\004\022\003x\000\179\004\027\000\000\0043\003\134\000\000\000\151\000\000\000\000\000\146\002\241\004\013\000\000\003h\000\177\003v\000\000\003i\000\000\000\000\000\000\000\000\000\000\003\247\003\n\003\135\000\176\003w\000\000\000\000\003\136\000\147\000\000\003v\003\137\000\000\000\149\000\000\003\252\003\138\000\178\001r\003\253\004\014\000\179\003w\003f\003}\000\000\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000\177\004\140\004\011\000\000\000\000\000Y\000\000\000\000\000\000\002\158\002\187\004\012\000\000\002\191\000\000\000\000\000\000\004\001\000\000\000\000\000\000\004<\000\149\004\142\003f\003\172\000\178\000\000\004\022\000\000\000\179\004\027\000\000\0043\003\134\000\000\000\151\003\135\000\000\004\013\000\000\003h\001a\004\014\001b\003i\003\247\000\000\000\000\000\000\001a\003\142\001b\000\000\000\000\003\135\003v\000\000\000\000\000\134\003\136\003\252\000Y\002\192\003\137\003\253\004\014\002\193\003w\003\138\000\000\003f\003}\000\134\000\000\003h\000\000\005+\000\000\003i\004\015\000\000\000\000\004\021\004\022\000\000\000Y\004\027\000\000\0043\002\158\000\134\004\012\000\000\001c\000\000\004\001\000\000\001d\000\134\004\017\004\018\001c\000\000\000\000\000\000\001d\004\022\003f\003}\004\027\000\000\0043\003\134\000\000\000\000\000\000\000\000\000\000\001\028\004\013\000\000\003h\000Y\001q\000\000\003i\002\158\000\000\004\012\003\247\000\000\001q\001\021\003\135\000\000\000\000\000\000\000\000\003\136\003v\000\000\000\000\003\137\000\000\003\252\000\000\000\000\003\138\003\253\004\014\000\000\003w\000\000\000\000\000\000\000\000\004\013\000\000\003h\002\206\000\000\000\000\003i\004\015\000\000\000\000\002\187\000\000\000\000\002\191\000\000\002\207\001a\003v\001b\000\000\000\000\000\000\000\000\004\001\000\000\000\000\000\000\004\017\004\018\003w\003f\003}\000\000\000\000\004\022\000\000\000\000\004\027\000\000\0043\003\134\001a\000\000\001b\000\000\000Y\000\000\001r\000\000\002\158\000\000\004\012\000\000\000\000\003\247\001r\000\000\000\000\000\000\002\232\000\000\003\135\000\000\002\192\003v\000\134\003\136\002\193\001c\003\252\003\137\000\000\001d\003\253\004\014\003\138\003w\002\187\000\000\004\013\002\191\003h\000\000\002\209\000\000\003i\000\000\001\031\004\015\0037\000\134\003\247\001\022\001c\001\023\000\000\000\197\001d\001q\003f\003g\003v\000\000\000\000\004\001\000\000\003\252\000\000\004\017\004\018\003\253\004\014\000\000\003w\001\139\004\022\003f\003}\004\027\004^\0043\003\134\001\139\001q\002\187\004W\000\134\002\211\001\160\000\000\002\192\000Y\000\000\000\000\002\193\002\158\001\162\004\012\000\000\000\000\000\000\004\001\003\135\002\233\000\000\004\017\004Y\003\136\000\134\000\000\003h\003\137\004\022\000\000\003i\004\027\003\138\0043\003\134\000\000\002\206\003\013\006P\003\016\000\000\004\013\000\000\003h\000\000\002\236\003\247\003i\002\207\000\134\000\000\000\000\000\000\002\192\001r\003\135\003v\002\193\000\000\000\000\003\136\003\252\000\000\000\000\003\137\003\253\004\014\003\019\003w\003\138\000\000\003f\003}\002\239\004V\000\000\000\000\000\000\000\000\001r\004W\000\000\000\000\000\000\000\000\000\000\000Y\000\132\000\000\000\000\002\158\000\133\004\012\000\000\000\000\000\000\004\001\000\000\000\000\000\000\004\017\004Y\000\000\002\206\000\000\000\000\000\000\004\022\002\187\000\000\004\027\002\191\0043\003\134\002\187\002\207\002\241\002\210\000\000\000\000\004\013\001\139\003h\000\000\000\000\003v\003i\000\000\000\000\000\000\002\242\000\000\003\247\000\000\003\135\001\168\000\134\003w\000\000\003\136\000\000\000\135\003v\003\137\000\000\000\136\001\139\003\252\003\138\000\000\002\206\003\253\004\014\000\000\003w\003f\003}\000\134\000\000\004j\001\170\002\192\002\207\000\134\000\000\002\193\004k\002\192\000\000\000\145\000Y\002\193\000\000\000\000\002\158\000\000\004\012\000\000\000\000\000\000\000\000\000\000\004\001\002\241\000\000\000\000\004\017\004m\000\000\000Y\000[\001\213\000_\004\022\000\000\000\000\004\027\003\012\0043\003\134\000\000\000\000\000\000\003\135\004\013\000\000\003h\001a\000\000\001x\003i\003\247\000\000\000\000\000\000\000\000\000\000\003\144\000\000\000\000\003\135\003v\000\000\000a\000\000\003\136\003\252\000\000\000\000\003\137\003\253\004\014\000\000\003w\003\138\000\000\003f\003}\000\000\004h\004u\000\000\000\000\000\000\000\000\004W\000\000\000\000\000\000\000\146\000\000\000Y\003f\003{\000\000\002\158\000\134\004\012\002\206\001c\000\000\004\001\000\000\001d\002\206\004\017\004Y\000\000\000\000\000\000\002\207\000\147\004\022\003f\003}\004\027\002\207\0043\003\134\000\000\000\000\000\000\000\132\000\000\006J\004\013\000\141\003h\000Y\001q\000\000\003i\002\158\000\000\004\012\003\247\000\000\000Y\000\000\003\135\000\000\000\134\000\000\003h\003\136\003v\000\000\003i\003\137\000\000\003\252\000\000\000\000\003\138\003\253\004\014\000\000\003w\000\149\000\000\000\000\004z\004\013\001a\003h\001x\000\000\000\000\003i\004v\000\000\000\134\000\157\000\000\000\000\000\000\000\135\000\000\002\208\000\000\000\136\000\000\000\000\000\000\000\000\004\001\000\000\000\000\000\000\004\017\004x\000\000\003f\003}\001\006\000\000\004\022\000\000\000\000\004\027\000\000\0043\003\134\006V\000\145\000\000\000\000\000Y\000\000\001r\000\000\002\158\000\134\004\012\000\000\001c\003\247\000\000\001\t\001d\0010\000\000\000\000\003\135\000\000\000\000\003v\000\000\003\136\000\000\000\000\003\252\003\137\005\017\000\000\003\253\004\014\003\138\003w\000\000\000\000\004\013\003v\003h\000\000\001q\000\000\003i\000\000\000\000\004v\000\000\000\000\003\247\003w\001\138\000\000\000\000\000\000\000\000\000\000\003f\003g\003v\000\000\000\000\004\001\000\000\003\252\000\000\004\017\004x\003\253\004\014\000\000\003w\001\139\004\022\003f\003}\004\027\001\140\0043\003\134\000\146\001\141\000\000\006K\000\000\006Y\001\142\000\000\000\000\000Y\000\000\000\000\000\000\002\158\001C\004\012\000\000\000\195\000\000\004\001\003\135\000\000\000\147\004\017\006M\003\136\000\134\000\000\003h\003\137\004\022\000\000\003i\004\027\003\138\0043\003\134\001a\000\000\001x\000\000\001r\000\196\004\013\000\197\003h\000\000\000\177\003\247\003i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\135\003v\000\000\000\000\000\000\003\136\003\252\000\000\005\019\003\137\003\253\004\014\000\149\003w\003\138\000\000\000\178\000\000\003f\003}\000\179\000\000\000\000\000\000\000\000\006K\000\151\000\132\001A\000\134\001\138\000\141\001c\000Y\000\000\000\000\001d\004\156\000\000\000\000\000\000\004\001\000Y\000\000\000\000\004\017\006M\000\000\000\000\000\000\000Y\001\139\004\022\000\000\000\000\004\027\001\140\0043\003\134\004\187\001\141\000\000\001q\000\000\000\000\001\142\000\000\004\190\000\000\003h\003v\000\000\000\000\003i\000\000\000\000\000\134\003\247\000\000\003\135\000\000\000\135\003w\000\000\003\136\000\136\000\000\003v\003\137\004\196\000\000\000\132\003\252\003\138\000\000\000\141\003\253\004\014\000\000\003w\000\000\000\000\001a\000\000\001b\000\000\000Y\001\028\000\000\000\145\000\000\006K\000Y\000[\002*\000_\000\000\004\233\000\000\000\000\003\130\001\021\001\175\000Y\000[\0029\000_\004\001\000\000\000\000\000\000\004\017\006M\000\000\001a\000\000\001x\000\000\004\022\000\000\000\134\004\027\001r\0043\003\134\000\135\000a\000\000\003\135\000\136\000\000\000\134\000\000\000\000\001c\000\000\000\000\000a\001d\000\000\000\000\000\000\003\146\000\000\000\000\003\135\005#\000\000\003v\000\000\003\136\000\000\000\132\000\145\003\137\000\000\000\141\000\000\004\197\003\138\003w\000\000\000\000\000\134\001q\000\000\001c\000Y\001\138\000\146\001d\000\000\004\235\000\000\000Y\000[\002>\000_\000\000\000\000\000Y\000\000\000\000\000\191\000\192\000\194\000\195\000\000\000\000\001\139\000\000\000\147\000\000\000\000\001\140\000\000\001q\000\000\001\141\004\200\000\000\000\134\004\236\001\142\004\223\003\134\000\135\000\000\000a\000\000\000\136\000\196\001\031\000\197\004\"\000\000\000\177\001\022\000\000\001\023\000\000\000\197\000\000\000\000\000\000\000\000\003\135\000\000\000\000\000\000\000\000\003\136\000\000\000\146\000\145\003\137\000\000\001\028\000\149\000\132\003\138\000\132\000\178\000\143\001r\000\141\000\179\000\191\001h\000\194\000\195\001\021\000\151\000\000\001A\000\147\000Y\001\006\000\000\000\132\000\000\000\000\000\000\000\141\000\000\000\000\000\000\000\000\001\006\000Y\000[\002\128\000_\000\000\000Y\000\196\001r\000\197\000\000\000\000\000\177\001\t\000\000\0010\000\000\000\000\000\000\000\000\000\134\000\000\000\134\000\000\001\t\000\135\0010\000\135\000\000\000\136\000\000\000\136\0051\000\000\000\149\000a\000\000\000\000\000\178\000\000\000\134\000\000\000\179\001\139\000\000\000\135\000\146\000\000\000\151\000\136\001A\003f\003}\000\145\001\138\000\145\000\000\001\172\000\000\000\000\000\191\002\197\000\194\000\195\000\000\000\000\000Y\000\000\000\147\000\000\004\156\001\006\000\132\000\145\000\000\001\139\000\141\000\000\000\000\000\000\001\140\000\000\000\000\000\000\001\141\003f\003g\000Y\000\196\001\142\000\197\000\000\004\189\000\177\001\031\001\t\004*\0010\000\000\001\022\004\190\001\023\003h\000\197\000\000\000\000\003i\000\000\000Y\000[\002\134\000_\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\178\000\000\000\134\004\196\000\179\000\000\000\000\000\135\000\000\000\000\000\151\000\136\001A\000\000\000\146\000\134\000\146\003h\000\000\000\000\000\000\003i\000\000\000a\000\000\000Y\000[\002\139\000_\000\000\000\191\003m\000\194\000\195\000\146\000\145\000\147\000\000\000\147\000\000\000\000\000\000\000\132\000\000\000\000\000\000\000\141\001\006\000\191\003\249\000\194\000\195\000\000\000\000\000\000\000\000\000\147\000Y\000\196\000a\000\197\000\148\000\000\000\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000\000\0010\000\000\000\000\000\196\000\000\000\197\000\000\000\000\000\177\003v\000\149\000\000\000\149\000\000\000Y\001|\000\178\000\000\000\134\004\197\000\179\003w\000\000\000\135\000\151\000\000\000\151\000\136\001A\000\000\000\149\000\000\000\000\004\198\000\178\000\000\000\000\000\000\000\179\000\000\000\000\000\000\000\146\003v\000\151\000\000\001A\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\000\003w\000\191\004\024\000\194\000\195\004\200\000\000\000\000\004\205\000\147\004\223\003\134\003f\003}\000\000\000\000\001\028\000\000\000\000\000\000\000\000\000\000\003f\003g\000\000\000\000\001\006\000\000\000\000\000\196\001\021\000\197\003\135\004G\000\177\000\000\000\000\003\136\000\000\000\000\000\000\003\137\000\000\000\000\000\000\000\000\003\138\000\132\000\000\000\000\001\t\000\133\0010\003f\003}\000\000\000\149\000\000\000\000\000\000\000\178\002\232\001\006\003h\000\179\000\000\003\135\003i\000\000\000\000\000\151\000\134\001A\003h\003\240\005\004\000\146\003i\000\000\000\000\003\148\000\000\000\000\000\000\000\000\000\000\001\t\000\000\0010\000\000\000\191\004\202\000\194\000\195\000\000\000\000\000\134\000\000\000\147\000\000\000\000\000\135\002\232\000\000\003h\000\136\000\000\000\000\003i\000\000\004M\000\000\000\000\000\000\003\130\003f\003}\000\000\000\196\000\000\000\197\000\000\000\000\000\177\000\000\000Y\000\000\000\000\000\000\000\145\000\000\000\000\000\000\000\000\000\000\000\000\003\240\004P\000\000\000\000\000\000\001\031\000\000\004\169\000\000\000\149\001\022\000\000\001\023\000\178\000\197\000\000\003\247\000\179\000\000\000\000\003f\003}\000\000\000\151\000\000\001A\003v\000\000\002\232\000\000\003h\003\252\000\000\000\000\003i\003\253\003v\000\000\003w\000\000\000\000\003\240\004F\003f\003}\000\000\001\028\000\000\003w\000\000\004O\000\000\000\000\000\000\000\000\000\000\000\000\003\247\000\000\000\000\001\021\003f\003g\000\000\003\240\003\241\004\001\003v\000\000\002\232\000\000\003h\003\252\000\146\000\000\003i\003\253\000\000\000\000\003w\000\000\000\000\000\000\003\134\003f\003}\000\000\000\000\000\000\000\000\000\000\003\255\002\232\000\000\003h\000\147\000\000\000\000\003i\000\000\000\000\000\000\000\000\000\000\003\135\003\240\003\251\004\001\000\000\003\136\000\134\000\000\003h\003\137\003\135\000\000\003i\000\000\003\138\003\247\000\000\000\000\000\000\000\000\003\134\000\000\000\000\000\000\003\150\003v\000\000\000\000\000\000\002\232\003\252\003h\000\000\000\000\003\253\003i\000\000\003w\000\149\000\000\000\000\003\135\003f\003}\000\000\000\000\003\136\000\000\000\000\003\255\003\137\000\000\000\159\000\000\000\000\003\138\003\247\000\000\000\000\000\000\000\000\000\000\000\000\003\240\004R\004\001\003v\001\031\000\000\004\212\000\000\003\252\001\022\000\000\001\023\003\253\000\197\000\000\003w\003\247\000\000\000\000\003\134\003f\003}\000\000\000\000\000\000\000\000\003v\003\255\002\232\000\000\003h\003\252\000\000\000\000\003i\003\253\000\000\000\000\003w\000\000\003\135\003\240\005\025\004\001\003v\003\136\000\000\000\000\000\000\003\137\003\255\000\000\000\000\000\000\003\138\000\000\003w\003\247\000\000\000\000\003\134\003f\003z\000\000\000\000\000\000\004\001\003v\000\000\002\232\000\000\003h\003\252\000\000\000\000\003i\003\253\000\000\000\000\003w\000\000\003\135\000\000\003\134\003f\003}\003\136\000\000\000\000\000\000\003\137\003\255\000\000\000\000\000\000\003\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\135\003\240\005\027\004\001\000\000\003\136\000\134\000\000\003h\003\137\000\000\000\000\003i\000\000\003\138\003\247\000\000\000\000\003\135\000\000\003\134\003f\003}\000\000\000\000\003v\000\000\000\000\000\000\002\232\003\252\003h\003\152\000\000\003\253\003i\000\000\003w\000\000\000\000\000\000\003\135\003\240\005\029\000\000\000\000\003\136\000\132\000\000\003\255\003\137\000\141\000\000\000\000\000\000\003\138\003\247\000\000\000\000\000\000\000\000\000\000\000Y\000\000\000\000\004\001\003v\000\000\000\000\000\000\002\232\003\252\003h\000\000\000\000\003\253\003i\000\000\003w\000\000\000\000\000\000\003\134\003f\003}\000\000\000\000\000\000\000\000\000\000\003\255\000\000\000\000\000\000\000\000\000\000\000\134\000\000\000\000\000\000\000\000\000\135\000\000\003\135\004I\000\136\004\001\003v\003\136\000\000\000\132\000\000\003\137\000\000\000\133\000\000\000\000\003\138\000\000\003w\003\247\000\000\000\000\003\134\000\000\000\000\003f\003y\000\000\000\145\003v\000\000\002\232\000\000\003h\003\252\000\000\000\000\003i\003\253\000\000\000\000\003w\000\000\003\135\000\000\000\000\000\132\000\132\003\136\000\000\000\141\000\141\003\137\003\255\000\000\000\000\000\000\003\138\000\134\000\000\003\247\000Y\000Y\000\135\000\000\000\000\000\000\000\136\000\000\004\001\003v\000\000\000\000\000\000\000\134\003\252\003h\000\000\000\000\003\253\003i\000\000\003w\000\000\000\132\000\000\003\134\000\000\000\141\000\000\000\000\000\145\000\000\000\000\003\255\000\134\000\134\000\000\000\000\000Y\000\135\000\135\000\000\000\000\000\136\000\136\000\000\003\135\000\146\000\000\004\001\000\000\003\136\000\000\000\000\000\000\003\137\000\000\000\000\000\000\000\000\003\138\003\247\000\000\000\000\001N\000\000\003\134\000\145\000\145\000\147\000\000\003v\000\134\000\000\000\000\000\000\003\252\000\135\000\000\000\000\003\253\000\136\000\000\003w\000\000\002\187\000\132\003\135\002\191\001\201\000\141\000\197\003\136\000\000\000\177\003\255\003\137\000\000\000\000\000\000\000\000\003\138\000\132\000\000\000\000\000\145\000\141\000\000\000\000\000\000\000\146\004\001\000\000\000\000\003v\000\000\000\149\000Y\000\000\000\000\000\178\000\000\000\000\000\132\000\179\000\000\003w\000\141\003\134\000\000\000\151\000\000\000\147\000\000\002\232\000\134\000\000\000\000\002\192\000\000\000\135\000\000\002\193\000\000\000\136\000\000\000\000\000\146\000\146\003\135\000\000\000\134\000\000\000\000\003\136\000\000\000\135\000\000\003\137\000\000\000\136\000\000\000\000\003\138\002\170\002\170\000\000\000\000\000\145\000\147\000\147\000\000\000\134\000\000\000\000\000\000\000\000\000\135\000\000\000\149\000\000\000\136\000\000\000\000\000\145\000\146\000\000\000\000\000\000\002\172\002\189\000\197\000\197\000\161\000\177\000\177\000\000\000\132\000\000\000\000\000\000\000\141\003V\000\000\000\000\000\145\000\000\000\147\000\000\000\000\002\187\000\000\000\000\002\191\000\000\000\000\000\149\000\149\002\233\000\000\000\178\000\178\000\000\000\000\000\179\000\179\002\167\003X\000\000\000\197\000\151\000\151\000\177\000\000\002\187\002\206\003\018\002\191\003\016\000\000\003 \000\000\000\000\000\000\002\236\000\000\000\134\002\207\000\146\000\000\000\000\000\135\000\000\000\000\000\149\000\136\000\000\000\000\000\178\002\232\000\000\000\000\000\179\002\192\000\146\002\228\003\019\002\193\000\151\000\000\000\147\000\000\002\239\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\003V\000\000\002\232\000\000\000\146\000\147\002\192\000\000\000\000\000\000\002\193\000\000\002\187\000\000\000\177\002\191\000\000\000\000\000\000\000\000\000\000\001\177\000\000\000\000\000\000\003\170\000\147\000\197\000\000\000\000\000\177\000\000\000\000\000\000\002\241\000\000\000\149\000\000\000\000\000\000\000\178\000\000\000\000\000\000\000\179\000\000\000\000\000\000\002\242\000\000\000\151\000\177\000\149\000\132\000\000\000\132\000\178\000\141\000\000\000\141\000\179\002\232\002\233\000\000\000\000\002\192\000\151\000\000\000\132\002\193\002\226\000\000\000\141\000\149\000\000\000\000\000\000\000\178\000\146\002\206\000\000\000\179\003\020\000\000\000\000\000\000\002\233\000\151\002\236\000\000\000\000\002\207\000\000\000\000\000\000\002\228\000\000\000\000\000\000\000\000\000\147\000\000\000\134\002\206\000\134\000\000\003\020\000\135\000\000\000\135\003\022\000\136\002\236\000\136\000\000\002\207\002\239\000\134\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\177\000\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\022\000\145\000\000\000\145\000\000\000\000\002\239\000\000\000\132\000\000\000\000\002\233\000\141\000\149\000\000\000\000\000\145\000\178\000\000\003\028\000\000\000\179\000\000\000\000\000\000\002\241\000\000\000\151\002\206\000\000\000\000\003\020\000\000\000\000\000\000\000\000\000\000\002\236\000\000\002\242\002\207\000\000\000\000\003\027\003f\003g\000\000\000\000\000\000\002\241\000\000\000\000\000\132\000\000\000\000\000\000\000\141\000\134\000\000\003\022\000\000\000\000\000\135\002\242\000\000\002\239\000\136\000\132\000\000\000\000\000\000\000\141\000\000\0031\000\000\003<\000\000\000\000\000\000\000\000\000\000\000\146\000\000\000\146\000\000\000\000\000\000\000\000\003D\000\000\000\145\000\000\000\000\000\134\000\000\003h\000\146\000\000\002\228\003i\002\228\000\134\003\025\000\147\000\000\000\147\000\135\000\000\002\241\000\000\000\136\000\000\000\000\002\228\000\000\000\000\000\134\000\000\000\147\000\000\003\160\000\135\002\242\000\000\000\000\000\136\000\000\000\000\000\177\000\000\000\177\000\000\000\000\000\000\000\145\003\213\000\000\000\132\000\000\000\000\000\000\000\141\000\000\000\177\000\000\000\000\000\000\000\000\000\000\000\145\000\149\000\000\000\149\000\132\000\178\000\132\000\178\000\141\000\179\000\141\000\179\000\000\003K\000\000\000\151\000\149\000\151\000\000\000\000\000\178\000\146\000\000\000\000\000\179\000\132\000\000\000\132\000\000\000\141\000\151\000\141\000\000\000\000\000\000\000\000\000\000\000\134\002\228\000\000\000\000\000\000\000\135\000\147\000\000\003v\000\136\000\000\000\000\000\000\000\000\000\000\000\000\000\134\000\000\000\134\003\215\003w\000\135\000\000\000\135\000\000\000\136\000\000\000\136\000\146\000\000\000\000\000\177\000\000\000\145\000\000\003\217\000\000\000\134\000\000\000\134\000\000\000\000\000\135\000\146\000\135\000\176\000\136\000\000\000\136\000\145\000\147\000\145\000\000\000\149\000\000\000\000\000\000\000\178\000\000\000\000\000\176\000\179\000\000\000\000\000\000\000\147\000\000\000\151\000\000\000\000\000\145\000\000\000\145\000\000\000\000\000\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\000\000\003\135\000\141\000\000\000\132\000\177\000\000\000\000\000\133\000\000\000\000\000\000\000\149\000\000\000\000\003\154\000\178\000\000\000\000\000\000\000\179\000\000\000\000\000\000\000\000\000\132\000\151\000\149\000\146\000\141\000\000\000\178\000\000\000\000\000\000\000\179\000\132\000\000\004&\000\000\000\141\000\151\000\000\000\000\000\146\000\176\000\146\000\134\000\000\000\000\000\147\000\000\000\135\000\134\000\000\000\000\000\136\004/\000\135\0047\000\000\000\176\000\136\002\228\000\000\000\146\000\147\000\146\000\147\000\000\000\000\000\000\000\000\000\000\000\134\000\177\000\000\000\000\000\000\000\135\000\145\000\000\002\228\000\136\002\228\000\134\000\145\000\147\000\000\000\147\000\135\000\177\000\000\000\177\000\136\000\000\000\000\000\149\000\000\000\000\000\000\000\178\000\000\000\000\000\132\000\179\000\000\000\145\000\141\000\000\000\000\000\151\000\177\000\149\000\177\000\149\000\000\000\178\000\145\000\178\000\132\000\179\000\000\000\179\000\141\000\000\000\000\000\151\000\000\000\151\000\000\000\132\000\000\000\000\000\149\000\141\000\149\000\000\000\178\000\000\000\178\000\000\000\179\000\132\000\179\000\000\000\000\000\141\000\151\000\000\000\151\000\000\004\161\000\134\000\000\000\000\000\000\000\000\000\135\000\000\000\146\000\000\000\136\000\000\000\000\000\000\000\146\000\000\000\000\000\134\000\000\000\000\000\000\000\000\000\135\000\000\000\000\002\228\000\136\004\173\000\134\000\000\000\147\000\000\000\000\000\135\000\145\000\146\000\147\000\136\004\178\000\000\000\134\000\000\000\000\000\000\000\000\000\135\000\146\000\000\000\000\000\136\000\145\000\000\002\228\000\000\000\000\000\177\000\000\000\147\000\000\000\000\000\000\000\145\000\000\002\228\000\000\000\000\000\000\000\132\000\147\000\000\000\000\000\141\000\000\000\145\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\178\000\177\000\149\000\000\000\179\000\132\000\000\000\000\000\000\000\141\000\151\000\000\000\177\000\000\000\000\000\000\000\163\000\000\000\000\006,\000\000\000\000\000\000\000\149\000\000\004\185\000\000\000\178\000\000\000\000\000\000\000\179\000\132\000\146\000\149\000\134\000\141\000\151\000\178\000\132\000\135\004\194\000\179\000\141\000\136\000\000\006\140\000\000\000\151\000\146\002\228\000\000\004\216\000\000\000\134\000\147\000\000\000\000\000\000\000\135\000\146\000\000\000\000\000\136\004\221\000\000\002\228\000\000\000\145\000\000\000\000\000\147\000\146\000\000\000\000\000\000\000\000\002\228\000\000\000\000\000\177\000\134\000\147\000\000\000\000\000\000\000\135\000\145\000\134\002\228\000\136\000\000\000\000\000\135\000\147\000\000\000\177\000\136\000\000\000\000\000\000\000\000\000\149\000\000\000\132\000\000\000\178\000\177\000\141\000\000\000\179\000\000\000\000\000\000\000\145\000\000\000\151\000\000\000\149\000\177\000\132\000\145\000\178\000\132\000\141\000\000\000\179\000\141\000\000\000\149\000\000\000\000\000\151\000\178\000\000\000\000\000\000\000\179\000\132\000\000\004\228\000\149\000\141\000\151\000\000\000\178\000\000\000\000\000\146\000\179\000\000\000\000\000\000\000\134\000\000\000\151\000\000\000\000\000\135\000\000\000\000\000\000\000\136\000\000\000\000\002\228\000\000\000\146\000\000\000\134\000\147\000\000\000\134\000\000\000\135\000\000\000\000\000\135\000\136\000\000\000\000\000\136\000\000\000\000\006-\000\000\000\145\000\134\000\000\000\147\000\000\000\000\000\135\000\000\000\146\000\177\000\136\000\000\000\000\000\000\000\000\000\146\000\145\000\000\000\000\000\145\000\000\000\000\000\000\000\000\000\000\006-\000\000\000\000\000\177\000\000\000\147\000\149\001k\000\000\000\145\000\178\000\000\000\147\000\000\000\179\000\000\000\000\000\000\000\000\000\000\000\151\000\000\000\000\000\000\000\000\000\149\000\000\000\132\000\000\000\178\000\177\000\141\000\000\000\179\000\000\000\000\000\000\000\177\000\000\000\151\000\000\000\000\000\000\000\132\000\000\000\132\000\000\000\141\000\000\000\141\000\000\000\000\000\149\000\000\000\000\000\146\000\178\000\000\000\000\000\149\000\179\000\000\000\000\000\178\000\000\000\000\000\151\000\179\000\000\000\000\000\000\000\146\001\132\000\151\000\146\000\000\000\134\000\147\000\000\000\000\002\187\000\135\000\000\002\191\000\000\000\136\000\000\000\000\001\179\000\146\000\000\002\149\000\134\000\147\000\134\000\000\000\147\000\135\000\000\000\135\000\000\000\136\000\177\000\136\000\000\000\000\002\153\000\000\000\000\000\145\000\000\000\147\000\000\000\000\000\000\000\132\000\000\000\000\000\177\000\133\000\000\000\177\000\000\000\000\000\149\000\145\000\000\000\145\000\178\002\232\000\132\000\000\000\179\002\192\000\141\000\000\000\177\002\193\000\151\000\000\000\149\000\000\000\000\000\149\000\178\000\000\000\132\000\178\000\179\000\000\000\141\000\179\000\000\000\000\000\151\000\000\000\000\000\151\000\149\000\000\000\000\000\132\000\178\000\000\000\134\000\141\000\179\000\000\000\000\000\135\000\000\000\000\000\151\000\136\000\000\000\000\000\000\000\000\000\000\000\134\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\000\000\136\000\146\000\000\000\000\000\000\000\000\000\000\000\134\000\000\000\145\000\000\000\000\000\135\000\000\000\000\000\000\000\136\000\146\002\200\000\146\000\000\000\000\000\134\000\147\000\145\002\233\000\000\000\135\000\000\000\000\000\000\000\136\000\000\000\000\002\215\000\000\002\217\000\000\000\000\000\147\000\145\000\147\002\206\000\000\000\000\003\023\000\000\000\000\000\177\000\132\000\000\002\236\000\132\000\141\002\207\000\145\000\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\000\132\000\177\000\000\000\000\000\141\000\149\000\000\000\000\000\000\000\178\000\000\000\000\000\000\000\179\002\239\000\000\000\000\000\000\000\000\000\151\000\000\000\149\000\000\000\149\000\146\000\178\000\000\000\178\000\000\000\179\000\000\000\179\000\000\000\134\000\000\000\151\000\134\000\151\000\135\000\146\000\000\000\135\000\136\000\000\000\000\000\136\000\147\000\000\000\000\000\134\003\026\000\000\000\000\000\000\000\135\000\146\003p\002\241\000\136\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\145\000\146\002\242\003\175\000\000\000\000\000\000\000\132\000\147\003f\003g\000\141\000\000\000\145\000\000\000\000\000\000\000\177\003\180\000\000\000\000\000\000\000\000\000\147\000\149\000\000\000\000\000\132\000\000\000\000\000\000\000\141\000\000\000\177\002\187\000\000\000\000\002\191\000\165\000\149\000\000\000\000\000\000\000\178\000\000\000\000\000\132\000\179\000\177\000\000\000\143\000\000\000\000\000\151\000\000\000\149\000\134\000\000\000\134\000\178\003h\000\135\000\000\000\179\003i\000\136\000\000\000\000\000\000\000\151\000\149\000\000\000\000\000\000\000\178\000\000\000\134\000\146\000\179\000\000\000\146\000\135\000\000\002\232\000\151\000\136\000\000\002\192\000\000\000\145\000\000\002\193\000\000\000\146\003\184\000\134\000\000\003\205\000\000\000\147\000\135\000\000\000\147\000\000\000\136\000\000\000\000\000\000\000\000\000\145\003\244\000\000\000\000\000\000\000\000\000\147\000\000\000\000\000\000\000\132\000\000\000\000\000\000\000\143\000\177\000\132\000\000\000\177\000\145\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\149\000\178\000\132\000\000\000\178\000\179\000\133\000\000\000\179\000\000\003v\000\151\000\132\000\149\000\151\000\000\000\133\000\178\002\233\000\134\000\146\000\179\003w\000\000\000\135\000\134\000\000\000\151\000\136\000\000\000\135\000\000\000\000\000\000\000\136\002\206\000\000\004\149\002\238\000\000\000\146\000\000\000\147\000\000\002\236\000\000\000\000\002\207\000\000\003f\003g\000\134\000\145\000\000\000\000\000\000\000\135\004\251\000\145\000\146\000\136\000\134\000\147\000\000\000\000\000\000\000\135\000\177\000\000\000\000\000\136\000\000\002\239\000\000\000\000\000\000\000\132\000\000\000\000\000\000\000\133\000\147\000\000\000\000\000\145\000\000\000\132\000\177\003\135\000\149\000\133\000\000\000\000\000\178\000\145\000\000\000\000\000\179\000\134\000\000\003h\000\132\003\156\000\151\003i\000\133\000\148\000\000\000\000\000\149\000\000\000\000\000\000\000\178\000\000\002\241\000\000\000\179\000\000\000\000\000\000\003f\003g\000\151\000\000\000\134\003f\003g\000\149\002\242\000\135\000\000\000\146\003\127\000\136\000\134\003f\003g\000\146\000\000\000\135\000\000\000\151\000\000\000\136\000\000\000\000\000\000\000\000\000\000\000\134\000\000\000\000\000\000\000\147\000\135\000\000\000\000\000\145\000\136\000\147\000\000\000\000\000\000\000\146\000\000\000\000\000\000\000\145\000\000\000\134\000\000\003h\000\000\000\146\000\134\003i\003h\000\000\000\148\000\000\003i\000\000\000\145\000\000\000\134\000\147\003h\000\000\000\000\000\000\003i\000\000\000\000\000\000\000\000\000\147\000\000\000\000\003v\000\000\000\149\000\000\000\000\000\000\000\000\003\129\000\149\000\000\000\000\000\000\003w\000\000\000\000\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000\167\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\146\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\169\000\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\147\000\000\000\000\000\146\000\000\000\000\000\000\000\000\000\000\000\000\000\147\003v\000\000\000\000\000\000\000\000\003v\003\135\000\000\000\000\000\000\000\000\000\000\003w\000\000\000\147\003v\000\000\003w\000\000\000\000\003\158\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\183\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\003\135\000\000\000\000\000\000\000\000\003\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\164\003\135\000\000\000\000\000\000\003\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\168")) + ((16, "\001'\000\228\000\000\000\000\000\000\000l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\191\000\000\001#\000J\000\000\000\251\000\205\000\000\000\000\000\000\0003\000\000\000%\000\022\000\000\000\000\000D\000\000\000\150\000\000\000\000\000\000\001t\000\000\001\188\000\000\000\000\000\000\000\000\002\024\000\000\002D\002\148\000\000\000\000\002\182\000\000\003&\000\000\000\000\000\000\003X\000\000\004\018\000\000\004l\000\000\004\212\005\000\000\000\000\000\005v\000\000\005|\000\000\000?\000\000\000\000\005\168\000\000\005\200\000\000\000\000\006\020\000\000\006\160\000\000\000\000\000\000\007\008\000\000\000v\0078\002\024\000\000\000\000\000\000\000\208\001Z\003X\000\000\000\000\007>\000\000\000\246\000\000\002x\0013*\012\000\000\000\000\000\028\000\000\000\023\000\000\000\013+.\"\218'|\"\218\003\022(\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136'|\000\000\000\000\002V\000\000\007\136\000\000\0006\000\000\000\000\000\000\000\000\003h\000\000\000\166\000\000\000\000\016\178\000\000\016\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\003\136\000\000\004\200\000\000\006\008\000\000\007H\000\000\t@\000\000\n\128\000\000\011\192\000\000\022\144\000\000\022\236\000\000+r\000\000\0002\000\000\000\000\000\000\000\000\000\000\023\194\000\000\025\006\000\000\029\n\000\000\024V\000\000\000\000\026\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000;\007t\000\000\000\000\007\186\000\000\007\220\007\230\000\000\000\000\008(\000\000\008z\000\000\000\000\000\000\008~\000\000\008\154\000\000\000\000\008\182\000\000\008\196\t\020\000\000\000\000\t&\000\000\t0\000\000\000\000\000\000\tB\000\000\th\000\000\t\224\000\000\n\000\n\014\000\000\000\000\n@\000\000\nH\000\000\004,\nz\000\000\n|\000\000\n\132\000\000\n\136\000\000\000\000\000\000\n\154\000\000\n\160\020&\000\000\n\176\000\000\000X\007<\000\000\003\004\000\000\003v\000\000\000\000\003|\000\000\000\000\000\237\008\190\000\000\000\000\000\000\000\000\004H\000\000\004\248\000\000\004\188\000\000\0132\000\000\000\000\000\000\000\000\000\000\000\000\012\138\000\000\000\000\000\000\000\000\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000;\005n\0216\000\000\n\184\000\000\n\186\025&\000\000\n\206\000\000\000\000\003\188\000\000\000\000\000\000\000\000\000\000$ \000\0002\018\000\000\000\000\000\000\0062\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\196\000\000\000\000\000\000\000\000\000\000\000\000\011\004(\018\000\000\015\002\000\000\023\004\013\150\000\000\000\000\000\000\006\146\000\000\014\252\000\000\000\00026\000\000\000\000\000\000\006\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029\244\000\000\030\180\000\000\000\000\000\000\000\000\001\188\000\000\000\0002l\000\000\000\000\000\000\004V\002|\000\000\000\000\000\000\000\000\000\000\000\000\008\200\000\000\tP\000\000\n\144\000\000\019b\000\000\024~\000\000\027.\000\000\031\198\000\000!\186\000\000!\204\000\000#\240\000\000+\204\000\000\003n\000\000%\012\000\000%*\000\000%r\000\000\000\000\000\000\000\000\000\000\005\1282\134\000\000\006X\000\000\000\000\005x\003\242\000\000\006\184\000\000\000\000\000\000\001\222\000\000\000\000\000\000(~\000\000\000\000\000\000\000\000\000\000)\n\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\000\n\216\028\164\000\000\n\226\000\000\000\000\000\000\000\000\000\000\n\244\000\000\000\000\001\184\0046\000\000\005\006\000\000\000\000\000\000\001\238\000\000\011\132\004\254\n\248\000\000\000\000\011\004\000\000\011\016\011\024\000\000\000\000\011 \000\000\011(\000\000\000\000\000\000\011,\000\000\0116\000\000\000\000\011@\000\000\011J\011N\000\000\000\000\011Z\000\000\011b\000\000\000\000\000\000\011f\000\000\011x\000\000\011z\000\000\011\128\011\130\000\000\000\000\011\136\000\000\011\138\000\000\007,\011\146\000\000\011\150\000\000\011\158\000\000\011\166\000\000\000\000\000\000\011\180\000\000\001h\000\000\000\000\011\188\030\002\000\000\011\192\000\000\000\000\004N\000\000\000\000\004\252\000\000\000\000\000\000\000\000\000\000\007r\"^\000\000\011\200\000\000\011\222-\014\000\000\011\226\000\000\000\000\012\234\011\240\000\000\000\000\011\250\000\000\011\252\011\254\000\000\000\000\012\004\000\000\012\014\000\000\000\000\000\000\012\024\000\000\012&\000\000\000\000\012,\000\000\0120\0122\000\000\000\000\012>\000\000\012D\000\000\000\000\000\000\012N\000\000\012Z\000\000\012d\000\000\012h\012l\000\000\000\000\012r\000\000\012v\000\000\007v\012\132\000\000\012\138\000\000\012\140\000\000\012\142\000\000\000\000\000\000\012\144\000\000\012\146-\240\000\000\012\158\000\000\000\000\007\224.\128\000\000\012\166\000\000\012\1700\204\000\000\012\180\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\252\000\000$\196\000\0003\002\000\000\000\000\0114\000\000\000\000\004\208\0050\000\000\000\000\027\204\012\128\000\000\018\186+\242\000\000\000\000).\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021@).\000\000\021\232\000\000\023\152\000\011)0\000\000\td\000\000\000\000\000\000\007\240\000\000\026\004\000\000\000\0003&\000\000\000\000\000\000\008T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0003L\000\0003\166\000\000\000\000\000\000*\132\000\000\000\000\000\000,\022\000\000\000\000\000\000\000\000\008|\000\000\000\000\000\000\000\000\011@\000\000\000\000\020\178\000\000\001\130\000\000\000\000\000\000\002\168\000\000\012\140\000\000\021\004\000\000\028\026\000\000\029\008\000\000#\154\000\000$\230\000\000%\208\000\000&f\000\000'\000\000\000(r\000\000*\226\000\000,H\000\000\000\000\000\000\000\000\000\000,:\000\000\017\172\000\000\019L\n\000\000\000\021\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'\000\000\000\000\000\000\000\000\007.\000\000\005\132\000\000\000\000\013~\000\000\000\000\000\000,\026\000\000\000\000\000\000\000\000\000\000\014\138\000\000\000\000\000\000\000\000,\254\000\000\000\000\000\000\000\000\001\160\006p\000\000-\"\000\000\000\000\000\000\000\000\008\184\000\000-R\000\000\000\000\000\000\000\000\000\229\000\000\006\132\000\000\017f\000r)\182\000\000\000\000\000\000\002|\000\000\000\000\000\000\000\000\000\000\000\000\027$)\182\000\000\030\144\000\000\0312\026@\000\000\000\000\000\000\008\140\000\000 \006\000\000\000\0003\220\000\000\000\000\000\000\008\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031t\000\000#b\000\000\000\000\000\000\007\012\000\000\000\000\000\000\000\000\000\000\000\000\013\000\000\000\0158\000\000\018\022\000\000\018\156\000\000\020\246\000\000\023X\000\000\027\176\000\000 \166\000\000\"\188\000\000)\146\000\000-\210\000\000\013\236\000\0003f\000\0005V\000\0005\142\000\000)\206\000\000\000\000\000\0004,\000\000\000\000\000\000\002\170\000\0004|\000\000\000\000\000\0004\178\000\000\000\000\000\174\000\000\024 \000!\0058\000\000\005X\000\000\012\000\002\000\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0004\254\000\000$\232#6\008\218\000\000\000\000\000\000-\212\000\000.\022\000\000.Z\000\000%<&\n\000}\003\178\t\018\000\000\000\000\000\000\003\200\000\000\000\000\005\252\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0005\012\000\000\000\000\000\000\000\000!>\000\000&\202\000\000\000\000\000\000\000\000\000\000\000\000\012\196\000\000\006\026\000\000\000\000\000\000\024\142\002\012\000\000\025r\000\000\000\000\008\184\000\000\0028\000\000\000\000\013T\000\000\026\030\000\000\000\000!\162\000\000\000\000\000\000\007V\000\000\000\000\006H\000\000\000\000\018\014\000\000\000\000\000\000.\174\000\000\000\000\000\000\024\198\000\000\000\000\000\000\000\000.\220\000\000\000\000\000\000\000\000\003b\011V\000\000/0\000\000\000\000\000\000\000\000\000\000\000\000\014\016\000\000\000\000\006\030\000\000\014\160\000\000\007V\000\000\000\000\007H\028\188\000\000\007\188\000\000\000\000\000\000\000\000\007\012\000\000&\228\000\000\026\192\003\214\027^\000\000\004\022\000\000\015\\\000\000\015\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008N\028\000\001\018\028\172\000\000\000\000\000\000\002B\000\000\016\172\000\000\008\238\000\000\000\000\007V\t\140\029h\000\000\t\202\000\000\017\150\030\n\000\000\000\000\018>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t:\007\196\000\000\t`\000\000\000\000\000\000\000\000\007~\000\000\018\214\000\000\000\000\000\000\"\0305B\000\000\000\000\000\000 \182\000\000\000\000\000\000\000\000\005\152\006h\000\000\000\000/j\000\000\000\000\002\014\000\000\006\196\000\000\000\000\030\170\000\000\000\000\000\000/\192\000\000\000\000\000\000\000\0000T\000\000\000\000\004&\006\208\000\000\000\0000l\000\000\000\000\t\130\"F\000\000\007\140\000\000\000\0000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\204\000\000\000\000\000\000\002\206\000\000\000\000\007\210\000\000\000\000\"\184\000\000\000\000\000\0000\182\000\000\000\000\000\000\000\00018\000\000\000\000\008X\008\146\000\000\000\0001V\000\000\000\000\t\178\000\000\000\000\000\000\000\000\007\012\005x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\n\000\000\019N\000\000\000\000\000\0005\140\000\000\008@\000\000\000\000\000\000\004\146\000\000\017|\000\000\000\000\004\202\0204\000\000\020\220\000\000\000\000\000\000\008V\000\000\005\150\t\014\006\214\000\000\008\022\000\000\000\000\000\000\t\198\000\000'\030\t\244'8\000\000'\248\000\000\000\000\000\000\n\020\000\000\016\008\n<\000\000\000\000\0284\nV\031h\000\000 \140\000\000\000\000\000\000\nf\000\000\017\194\n\138\000\000\000\000\000\000\000\217\000\000\000\000\000\000\005\026\000\000\000\000\000\000\000\000\000\000\000\000\013j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000f\000\000\000\000\007\\\000\000\000\000\013l\000\000\000\000\000\000\000\000\008\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013p\000\000\000\000\013H\000\000\000$\000\000\000\000\006\142\000\000\000/\012\254\000\172\000\000\000\000\005\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\242\015$\000\000\000\000\002v\000\000\000\000\000\000\015Z\000\000\000\000\016|\017\024\000\000\000\000\000\000\000\000\019.\019\202\001:\000\000\019\230\000\000\000\000\000\000\000\000\000\000\000\000\002\174\000\000\000\000\0066\000\000\000\000\012\200\000\000\000\000\006.\000\000\000\000\000#\000\000\004\\\000\000\000\000\000\000\000\000\013\138\003\252\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\162\020\150\000\000\000\000\000\000\000\000\021$\000\000\000\000\012x\000\000\000\000\016\144\000\000\000\000\011\176\0212\005\022\000\000\021\152\000\000\000\000\000\000\000\000\013N\000\000\000\000\000\000\np\000\000\008J\006\004\000C\000\000\000\000\000\000\000\000\001\140\000\000\000\000\000\000\000\000\000\000\000\000\t\192\000\000\000\000\001\202\000\000\005d\013\146\005F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\242\000\000\000\000\019\238\022@\000\000\000\000\000\000\000\000\002 \000\000\013j\011\180\000\000\019\218\000\000\000\000\000\000\000\000\000\000\013\218\0226\000\000\000\000\023p\000\000\000\000\000\000\000\000\011\216\000\000\026:\000\000\000\000\000\000\000\000\000h\000\000\000\000\000\000\003\n\000\000\000\000\002\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000%\230\000\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\018\006\016\011\156\013R\000\000\007.\008\194\t&\tb\000\000\000\000\000\000\000\000\000\000\000\000\0078\021\132\000\000\030\182\n\204\000\000\000\000\n\216\000\000\022D\000\000*\142\000\000\000\000\007\162\022\208\000\000\031X\000\000\t\030\031\246\000\000\000\000\000\000\003>\007.\000\000\000\000\000\000\000\000\000y\000\000\002\158\000\000\003\n\001\136\000\000\000\000\000\000\004H\000\000\004\248\000\000\005\n\000\000\000\000\002Z\000\000\000\000\000\000\000\000\t\004\000\000\000\000\n\254\000\000\023\144\000\000\007V\013X\000\000\000\000\000\000\000\000\000\000\000u\000\000\000\000\000\000\000\000\000\0001|\000\000\007\250\000\000\000\000\000\000\000\000\000\000\001p\000\000\t\128\0064\nD\000\000\002\196\n\192\000\000\007^\000\000\003@\000\000\004\004\000\000\004\128\000\000\007V\000\000\000\000\000\000\000\000\000\000\005D\000\000\008\012\000\000\005\192\000\000\007V\013\178\000\000\002\188\000\000\013\174\012\158\000\000\008 \000\000\t\232\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\248\000\000\nX\000\000\000\000\000\000\000\000\000\000\000\000\013\184\000\000\000\000\012\210\000\000\000\000\012\190\008\192\013\254\000\000\014\002\000\000\000\000\t\208\008\136\000\000\012\242\000\000\000\000\013*\000\000\000\000\000\000\000\000\000\000\000\000\013\252\000\000\000\000\000\000\013\012\012\238\n\142\nh\013\012\013D\000\000\000\000\012\248\n\188\n\130\013\026\013R\000\000\000\000\005<\000\000\000\000\000\000\000\000\014 \000\000\000\000"), (16, "\003l\003\131\0017\000\013\001\212\001g\000J\001~\000\140\000\138\001g\002\193\001\203\000\139\002\197\000_\005\229\005:\005m\002\164\004Y\004A\001\214\006\144\006\145\003l\003\131\005\178\000\016\000\017\000\138\003)\006d\000\025\001\209\005\230\001.\000J\006e\001B\000_\000\138\005\004\000\138\006f\000\139\004\018\000\139\005\176\000J\005\179\005h\004\019\005n\003n\000\018\000\024\000\140\003o\005u\001i\000\140\000\140\000\140\001j\001i\000\141\002\198\000_\001j\000\142\002\199\005\131\003l\003\131\000_\006\149\004\019\001\013\003n\005v\000\017\000\140\003o\000\138\005y\005h\000\141\001V\001\131\000_\000\142\001w\000\140\005\\\000\140\000\151\001w\000\141\000\138\000\141\000\007\000\142\000\147\000\142\004\136\001\213\003\136\005\132\001\181\006:\005i\000g\006;\000_\005Z\003\234\000\151\005]\005h\006'\006m\000\005\006h\001\213\000\140\001/\003n\000\151\006?\000\151\003o\0068\000\028\005|\000_\000\140\005\006\001\223\004\246\000 \000\141\006i\003\253\005\231\000\142\005i\000K\003\237\003\238\003\240\000\140\005o\003|\000_\000f\000\141\000e\004\002\000h\000\142\000\004\004\003\004\020\002\212\003}\004\138\004g\003\253\000\031\001x\000\151\000g\004m\000\152\001x\002\213\004U\003|\005i\003\136\001\204\000\005\004\002\001\181\0068\000\151\004\003\004\020\006j\003}\000g\000\"\004\007\001\134\000\152\000\153\004B\006k\004a\003l\003\131\006\132\003*\004\028\005\234\000\152\004x\000\152\0049\003\140\000_\006)\006\158\005}\000_\001\144\000\153\004\007\006f\006\159\004\018\004\023\006\134\005\157\005h\003|\000_\000\153\004\028\000\153\003\141\006\136\000$\0049\003\140\003\142\001\145\003}\0017\003\143\000J\001\146\000\155\002\215\003\144\001\147\005\233\005\133\000\152\003\138\001\148\004\019\000\181\003n\000\138\003\141\000\159\003o\000\139\001\229\003\142\000\203\006\178\000\152\003\143\005\230\001\015\001E\0016\003\144\000\153\003l\003\131\005\243\000\155\003G\001Q\000\197\000\198\000\200\000\201\001\189\003\140\000\203\005i\000\153\000_\004\015\000\157\006s\002\164\004Y\004A\006\015\005\241\005\244\005h\004\016\000_\000a\001\225\000e\002=\003\141\002,\000\202\000\140\000\203\003\142\004\022\000\183\000\141\003\143\006\179\000\138\000\142\005\240\003\144\001S\004\016\004o\001\012\005\128\004\019\004m\003n\001\015\004\247\0016\003o\003:\000_\000\155\003l\003m\000g\000\184\005\241\005\244\005h\000\185\000\151\003\253\000(\002\246\001\015\000\157\0016\001G\000\008\001\217\004\249\003|\003\197\003\198\002\193\005i\004\002\002\197\001\140\005\142\004\003\004\020\006\180\003}\000_\000\140\0010\001\234\003l\003\131\000\141\006k\000_\005\231\000\142\006\182\004h\003\136\000*\001\181\005\140\005h\000J\000_\000\140\001\236\003n\006f\006\164\004A\003o\004\007\005\166\006{\001\237\004\023\006\184\002\245\005i\006\016\000\151\001\189\004\028\000\203\006\243\006\186\000\140\0049\003\140\001g\002\198\001~\001\236\003\253\002\199\006t\006\244\006u\000\152\000\203\004\019\001\141\003n\003|\000/\003:\003o\006{\004\002\003\141\003l\003\131\004\003\004\020\003\142\003}\006\175\004j\003\143\000h\000\153\005i\003;\003\144\000_\000_\0003\004U\006B\006f\006\164\004A\000J\001g\001\143\001h\001/\000_\000a\000b\000e\000\140\0017\004\007\001i\001\012\000\138\004B\001j\004a\000\139\004r\0060\0061\004\028\000_\004\252\004x\000\152\0049\003\140\002\165\004\019\004\181\003n\003|\0002\001\197\003o\001\015\0065\0016\000h\001\131\000g\002H\001w\003}\006\169\004:\000\153\003\141\000J\0005\006\019\000\140\003\142\002\212\001i\000J\003\143\003\253\001j\006+\006,\003\144\006}\001\141\000\140\002\213\006t\003|\006u\000\141\000\203\004[\004\002\000\142\003l\003\131\004\003\004\020\006\170\003}\000_\000h\001\215\001\"\004.\006\252\001w\006k\006x\000_\000J\004\005\0068\006f\006\164\004A\006~\001\027\006\127\000\151\006t\000\004\006u\004[\000\203\0007\0017\004\007\000h\003\130\005\167\004B\000\203\006\172\000_\001g\0026\001~\004\028\003\253\001x\006\174\000\005\0049\003\140\004\224\004\019\005\170\003n\003|\000;\001\132\003o\002\247\004\002\002:\003l\003\131\004\003\004\020\006\170\003}\006\171\004\187\001\134\003\141\000J\002\250\006C\006k\003\142\000_\0014\004\005\003\143\006f\006\164\004A\000\144\003\144\000J\005\189\005\190\0029\001x\000h\001\144\000\140\003\231\004\007\001i\001\012\000\138\004B\001j\006\172\000\139\000\152\006y\003\233\004\028\000_\006g\006\174\003F\0049\003\140\001\145\004\019\005\191\003n\000_\001\146\005o\003o\001\015\001\147\0016\005\192\000\153\000h\001\148\001w\0026\006\173\0024\001%\003\141\0011\001\018\001\172\001\028\003\142\001\029\002=\000\203\003\143\003\253\000_\003\232\004c\003\144\0028\000=\000\140\003\197\003\198\003|\002\165\000\141\003\232\001\145\004\002\000\142\003l\003\131\004\003\004\020\006\170\003}\005Y\003\197\003\198\001\"\001C\001\148\000\155\006k\000J\000_\0029\004\005\004^\006f\006\164\004A\000\251\001\027\002\166\000\151\000\161\005Z\005\213\005h\005]\005h\000\004\004\007\000?\007\004\001-\004B\001\191\006\172\000\203\001g\000J\001~\004\028\003\253\001x\006\174\007\005\0049\003\140\005\007\004\019\000\005\003n\003|\005\186\000_\003o\005\250\004\002\005\251\003l\003\131\004\003\004\020\006\170\003}\006\181\005\016\001\142\003\141\001\231\000J\000\203\006k\003\142\000_\003:\004\005\003\143\006f\006\164\004A\000J\003\144\000C\005\018\005\252\005i\002;\005i\001\144\000\140\004\163\004\007\001i\005\253\000\138\004B\001j\006\172\000\139\000\152\003\197\003\198\004\028\005\127\000B\006\174\006z\0049\003\140\001\145\004\019\003\200\003n\000_\001\146\004G\003o\006B\001\147\001\192\001(\000\153\001\186\001\148\001w\004\016\006\185\003\199\001%\003\141\001&\004\251\000_\001\028\003\142\001\029\006\161\000\203\003\143\003\253\000J\005\175\005\006\003\144\005\230\003-\000\140\003F\000h\003|\001\194\000\141\005\169\001\188\004\002\000\142\003l\003\131\004\003\004\020\006\170\003}\005\176\000E\005\179\005h\000G\000J\000\155\006k\002H\000_\001\233\004\005\000\203\002\164\004Y\004A\000J\001<\002\166\000\151\000\163\005}\000h\006\176\005x\004.\000L\004\007\000h\005j\002\167\004B\000J\006\172\006y\001g\000J\001~\004\028\003\253\001x\006\174\000N\0049\003\140\005v\004\019\003+\003n\003|\005y\005h\003o\000J\004\002\005\247\003l\003\131\004\003\004\020\006\170\003}\004\n\005i\005\021\003\141\004\224\000J\001\186\006k\003\142\000_\0030\004\005\003\143\002\164\004Y\004A\000J\003\144\000Q\003\197\003\198\004\169\000J\004\186\001\144\000\140\003\234\004\007\001i\005\236\000\138\004B\001j\006\172\000\139\000\152\006G\001\187\004\028\000_\001\014\006\174\000e\0049\003\140\001\145\004\019\006M\003n\005i\001\146\002\166\003o\001O\001\147\001\192\006G\000\153\003\236\001\148\001w\006\161\000\138\005d\000h\003\141\001R\004\147\000J\003:\003\142\002\166\003\197\003\198\003\143\003\253\000g\004\016\005e\003\144\000h\006D\000\140\000\203\000h\003|\001\193\000\141\000S\003:\004\002\000\142\003l\003\131\004\003\004\020\001\186\003}\004\255\004g\005\167\001l\000\203\000J\000\155\000J\005\193\000_\004%\004\005\006\167\002\164\004Y\004A\000\140\001u\000J\000\151\000\165\000\141\004\249\006\015\004P\000\142\004\164\004\007\000h\003\139\003H\004B\002=\004a\000h\001g\001\192\001~\004\028\003\253\001x\004!\000W\0049\003\140\006O\004\019\003L\003n\003|\006\161\000\151\003o\000J\004\002\004R\003l\003\131\004\003\004\020\000J\003}\004e\004g\005\023\003\141\001\228\001\194\000J\000d\003\142\000_\004\172\004\005\003\143\002\164\004Y\004A\004\188\003\144\002\031\000h\004P\0017\003;\006\152\001\144\000\140\006\153\004\007\001i\006K\006\021\004B\001j\004a\000\205\000\152\006]\006\183\004\028\000h\006\203\004!\004.\0049\003\140\001\145\004\019\001\012\003n\006K\001\146\004Q\003o\002B\001\147\002x\000J\000\153\004\230\001\148\001w\006\229\001g\003@\001h\003\141\000h\000\152\006\031\000\208\003\142\001\015\000_\0016\003\143\003\253\000J\006\157\006G\003\144\003D\005\237\000\005\0043\000J\003|\000\212\000J\002\166\000\153\004\002\000\211\003l\003\131\004\003\004\020\004u\003}\004\140\004g\0047\000h\003\197\003\198\000\155\005g\000J\000_\002\143\004\005\004\197\002\164\004Y\004A\000\140\005\238\002\201\001i\000\167\000J\005e\001j\000\138\000J\000\214\004\007\000\139\004w\006G\004B\001g\004a\001h\0068\001\026\005\019\004\028\003\253\001x\004!\002\193\0049\003\140\002\197\004\019\004\215\003n\003|\001\027\001w\003o\000J\004\002\005\018\003l\003\131\004\003\004\020\006G\003}\005\003\004g\005\025\003\141\002H\000\216\002\210\000\220\003\142\000_\006\210\004\005\003\143\006f\000\140\004\018\004u\003\144\006\227\000\141\004z\000\222\000\140\000\142\001\144\001i\002\236\004\007\001g\001j\001h\004B\000\140\004a\003q\000\225\002\198\000h\004\028\005\175\002\199\004!\000\229\0049\003\140\001\145\004\019\004v\003n\000\151\001\146\004z\003o\004\141\001\147\005\240\000h\001w\002\193\001\148\005\176\002\197\005\179\005h\006\177\003\141\006b\001x\005\026\003z\003\142\006J\004\141\003\215\003\143\003\253\005\241\005\244\005h\003\144\000\140\004\231\000\228\001i\004\143\003|\005\028\001j\004\236\004\132\004\002\000\231\003l\003\131\004\003\004\020\000\233\003}\006\130\004g\003O\003\230\001\028\004\142\001\029\000\237\000\203\000_\006\203\004\005\002\238\006f\004\236\004\018\002\198\001w\006\203\003S\002\199\004\238\004}\006I\000\138\005i\000\239\004\007\000\139\000\152\006\238\004B\001g\004a\001h\002\212\001\145\001x\004\028\003\253\005i\004!\005\224\0049\003\140\004\237\004\019\002\213\003n\003|\001\150\000\153\003o\006H\004\002\006\230\003l\003\131\004\003\004\020\006\163\003}\005\029\005\222\006\162\003\141\006\203\005\225\005h\006k\003\142\000_\006S\006\166\003\143\006f\000\140\004\018\006V\003\144\005\028\000\141\004\016\005$\000\140\000\142\000\241\001i\004\016\004\007\001g\001j\001|\004\023\006\168\001x\002\239\006\133\000\155\005'\004\028\005&\000\245\006\174\001\145\0049\003\140\004\016\004\019\000\244\003n\000\151\000\169\002\212\003o\002\214\003\029\005&\001\152\001w\002\193\005*\002\242\002\197\006\237\002\213\006\165\003\141\005i\000_\005\199\006\248\003\142\002\164\000\247\0052\003\143\003\253\000\249\005\028\006\204\003\144\000\140\0055\006\255\001i\005\254\003|\006\206\001j\002\245\006\247\004\002\0054\003l\003\131\004\003\004\020\006\163\003}\0058\0054\001}\000\252\000\254\002\166\003N\006k\001\000\000_\001\002\006\166\002\238\002\164\006\254\004\018\002\198\001w\005\028\001\006\002\199\000_\001F\000J\000\138\006B\003 \004\007\000\139\000\152\001\011\004\023\006\168\002\247\001;\001A\006\208\001x\004\028\003\253\006\237\006\174\005\221\0049\003\140\001@\004\019\002\248\003n\003|\001\222\000\153\003o\006\237\004\002\001\221\003l\003\131\004\003\004\020\006\163\003}\005\221\005\222\001\227\003\141\001\241\005\225\005h\006k\003\142\000_\001\244\006\166\003\143\002\164\000\140\004\018\001\248\003\144\005\011\000\141\001\247\005\222\004\135\000\142\001\250\005\225\005h\004\007\001\252\003U\002\000\004\023\006\168\001x\002\239\002\002\000\155\005\239\004\028\006\238\002\005\006\174\001\145\0049\003\140\002\t\004\019\002\008\003n\000\151\000\171\002\212\003o\002\011\002\241\004\020\001\154\002\013\002\193\002\017\002\242\002\197\006\238\002\213\002\193\003\141\005i\002\197\002\019\002\021\003\142\000h\002\025\002\024\003\143\003\253\002\027\002\029\000_\003\144\004\133\002 \005\175\002\"\004\135\003|\005i\002$\002\245\005\008\004\002\002&\003l\003\131\004\003\004\020\004\028\003}\002*\004!\004\011\0049\0023\005\176\0022\005\179\005h\000_\002A\004|\002\238\002\164\004\013\004\018\002\198\004;\000\140\006L\002\199\002G\002\198\002F\003l\003m\002\199\004\007\002\138\000\152\002J\004\023\004~\002\247\004?\002M\002Q\002P\004\028\003\253\002S\004!\001\"\0049\003\140\002U\004\019\002\248\003n\003|\002Y\000\153\003o\006D\004\002\000\203\001\027\002[\004\003\004\020\002^\003}\002b\002a\000_\003\141\003l\003\131\005i\002d\003\142\006\000\002f\004|\003\143\004\025\000\140\002j\003n\003\144\000_\000_\003o\002l\006B\002\164\004\026\004A\002n\004\007\002r\006$\002q\004\023\004~\002t\002\239\002v\000\155\001g\004\028\001h\000_\004!\002y\0049\003\140\002{\002}\002\127\002\131\002\137\000\173\002\212\003\019\003$\003\022\002\136\004\019\002\212\003n\002\142\002\242\002\148\003o\002\213\001\"\003\141\002\147\005G\005b\002\213\003\142\005\137\005t\005\130\003\143\003\253\005\172\006\015\001\027\003\144\003l\003m\003\025\005\188\005\220\003|\002=\005\249\002\245\000\140\004\002\006\142\001i\006\188\004\003\004\020\001j\003}\003l\003\131\005\240\006\192\001\"\001%\006\211\001+\006\215\004D\001\028\004F\001\029\005\205\000\203\000_\006\220\003|\001\027\002\164\004\026\004A\006\221\005\241\005\244\005h\001w\004\007\006\226\003}\006\225\004\023\004H\002\247\000\140\006\233\003n\006\235\004\028\002\247\003o\004J\006\241\0049\003\140\006\245\006\246\002\248\006\249\003\253\006\250\006\253\004\019\002\252\003n\007\000\006\023\007\001\003o\003|\007\t\000\000\000\000\000\000\004\002\003\141\000\000\000\000\004\003\004\020\003\142\003}\003l\003\131\003\143\000\000\000_\000\000\006C\003\144\000\000\004I\000\000\004\005\000\000\005i\006\026\000_\000\000\001$\000\000\002\164\004\026\004A\001\028\003\141\001\029\000\000\000\203\004\007\000\000\000\000\000\000\004B\001x\004C\000\000\000\000\000\000\003\146\004\028\000\000\006D\004!\000\203\0049\003\140\000\000\000\138\000\000\000\000\001g\000\147\001{\004\019\000\000\003n\001%\000\000\0033\003o\000\000\001\028\000_\001\029\003|\000\203\003\141\001\"\000\000\000\000\000\000\003\142\003\253\000\000\000\000\003\143\003}\003l\003m\000\000\003\144\001\027\003|\000\000\000\000\000\000\000\000\004\002\000\000\000\000\000\000\004\003\004\020\000\000\003}\003l\003\131\005\139\000\000\000\140\001y\000\000\000\140\000\000\000\141\001i\004\005\000\000\000\142\001j\000_\002H\000\000\000\000\002\164\004Y\004A\000\000\005\140\005h\006\029\003\168\004\007\000\000\005\139\000\000\004B\000\000\004C\000\140\000\000\003n\000\000\004\028\000\151\003o\004!\001w\0049\003\140\000\000\000\000\003\141\000\000\003\253\005\140\005h\004\019\000\000\003n\000\000\000\000\000\000\003o\003|\000\000\003\144\000\000\000\000\004\002\003\141\000\000\000\000\004\003\004\020\003\142\003}\003l\003\131\003\143\000\000\000\000\000\000\000\000\003\144\000\000\000\000\000\000\004\005\005i\000\000\001g\000_\001~\000\000\000\000\002\164\004Y\004A\000\000\001%\000\000\003=\000\000\004\007\001\028\000\000\001\029\004B\000\203\004C\000\000\000\000\000\000\000\000\004\028\005i\000\000\004!\000\000\0049\003\140\000\152\000\000\000\000\001x\000\000\000\000\000\000\004\019\000\000\003n\000\000\000\000\000\000\003o\000\197\001n\000\200\000\201\003|\000\000\003\141\000\140\000\153\000\000\001i\003\142\003\253\000\000\001j\003\143\003}\000\000\000\000\000\000\003\144\000\000\003|\000\000\000\000\000\000\000\000\004\002\000\202\000\000\000\203\004\003\004\020\000\183\003}\000\000\004`\003l\003\131\000\000\000\138\000\000\001w\005\139\000\149\000\000\004\005\000\000\000\000\000\000\000\138\005\175\000_\000\000\000\149\000\155\002\164\004Y\004A\000\184\005\143\000\000\004\007\000\185\005\140\005h\004B\000\000\004a\000\157\000\000\001G\005\176\004\028\005\179\005h\004!\000\000\0049\003\140\000\000\000\000\003\141\000\000\003\253\000\000\000\000\005\146\000\000\004\019\000\000\003n\000\140\000\000\003|\003o\003\148\000\141\000\000\004\002\003\141\000\142\000\140\004\003\004\020\003\142\003}\000\141\004b\003\143\000\000\000\142\000\000\000\000\003\144\000\000\000\000\000\000\004\005\000\000\001x\005\139\000\000\000\000\000\000\005i\000\000\000\151\000\000\000\000\003l\003\178\000\000\000\000\004\007\005i\000\000\000\151\004B\000\000\004a\000\000\005\140\005h\005)\004\028\000\000\000\000\004!\000\000\0049\003\140\000\000\000\000\003l\003\131\000_\000\000\000\000\000\000\002\164\000\000\000\000\000\000\000\000\002\193\001\144\000\000\002\197\000_\000\000\000\000\003\141\002\164\004\127\004A\001g\003\142\001~\000\000\003\253\003\143\000\140\000\000\003n\000\000\003\144\001\145\003o\000\000\003|\000\000\001\146\003N\000\000\004\002\001\147\000\000\000\000\004\003\004\020\001\148\003}\005i\004t\000\152\004\019\000\000\003n\000\000\000\000\000\000\003o\000\000\004\005\000\152\000\000\002\238\003l\003m\000\000\002\198\000\000\000\000\000\000\002\199\000\000\000\153\000\140\000_\004\007\001i\005\152\000\000\004B\001j\004a\000\153\003l\003\131\005\208\004\028\004\129\000\000\004!\000\000\0049\003\140\000\000\000\000\000\000\000\000\000\154\000_\000\000\000\000\000\000\002\164\004\127\004A\000\000\000\000\000\154\001w\000\000\000\000\000\000\000\000\003\141\000\000\000\140\000\000\003n\003\142\000\155\000\000\003o\003\143\005\t\000\194\000\000\000\000\003\144\003|\000\155\003l\003m\000\000\000\157\000\156\004\019\001\"\003n\000\000\000\000\003}\003o\003\253\000\157\000\000\002\193\002\239\000\000\002\219\004\020\001\027\000\000\003|\000\000\000\000\005\150\000\000\004\002\000\000\003l\003\131\004\003\004\020\002\212\003}\000\000\003\026\000\000\004\149\000\000\000\000\004\131\002\242\000\000\000_\002\213\004\005\000\000\002\164\004\026\004A\000\000\000\140\005\008\003n\000\000\001x\000\000\003o\000\000\004\028\000\000\004\007\004!\003\028\0049\004B\000\140\004\130\000\000\002\245\002\198\005\240\004\028\000\000\002\199\004!\000\000\0049\003\140\0057\004\019\000\000\003n\000\000\000\000\003|\003o\002\193\003l\003\131\002\197\000\000\005\241\005\244\005h\003\253\000\000\003}\001g\003\141\001h\001\144\005\139\000_\003\142\003|\003\"\002\164\003\143\004\018\004\002\000\000\002\247\003\144\004\003\004\020\000\000\003}\000\000\000\000\000\000\000\000\001\145\005\140\005h\000\000\002\248\001\146\001%\004\005\004(\001\147\000\000\001\028\000\000\001\029\001\148\000\203\000\000\002\238\004\019\000\000\003n\002\198\000\000\004\007\003o\002\199\000\000\004B\000\140\004\130\003|\001i\005i\000\000\004\028\001j\000\000\004!\000\000\0049\003\140\003\141\003}\000\000\000\000\002\212\000\000\000\000\000\000\003\253\000\000\000\000\004\253\000\000\000\000\003\150\004\135\002\213\005\139\003|\000\000\003\141\005i\001w\004\002\005\240\003\142\000\000\004\003\004\020\003\143\003}\005\139\000\000\005\175\003\144\000\000\000\000\000\000\005\140\005h\003l\003\131\004\005\000\000\000\000\005\241\005\244\005h\000_\000a\001\t\000e\005\140\005h\005\176\000_\005\179\005h\004\007\002\164\002\239\004\018\004B\000\000\004C\000\000\000\000\003\141\003\253\004\028\000\000\000\000\004!\000\000\0049\003\140\000\000\002\212\003|\000\000\003\026\003\152\000\000\004\002\000\000\000g\002\242\004\003\004\020\002\213\003}\000\000\004\019\000\000\003n\000\000\003\141\006\003\003o\005i\001x\003\142\004|\002\193\000\000\003\143\002\197\005i\003\028\000\000\003\144\000\000\000\000\005i\002\245\000\000\000\000\005i\004\007\005\139\000\000\000\000\004\023\004~\003l\003\131\005\013\000\000\005\163\004\028\004\135\000\000\004!\000\000\0049\003\140\000\000\003l\003m\000_\005\140\005h\000\000\002\164\002\193\004\018\000\000\002\197\000\000\000\000\000\000\003!\000\000\000\000\000\000\002\238\003\141\002\247\000\000\002\198\000\000\003\142\000\000\002\199\000\000\003\143\000\000\001\145\000\000\000\000\003\144\002\248\000\000\000\000\002\193\000\000\004\019\002\218\003n\000\000\000\000\001\156\003o\003\253\000_\000a\0019\000e\000\000\000\140\005\139\003n\000\000\003|\000\000\003o\000\140\005\139\004\002\000\000\002\198\005i\004\003\004\020\002\199\003}\005\161\000\000\003l\003\131\005\015\005\140\005h\006\017\004\135\000\000\001\012\004|\005\140\005h\005\159\000g\006\t\000_\000\000\000\000\000\140\002\164\000\000\004\018\002\198\000\000\000\000\004\007\002\199\000\000\000\000\004\023\004~\002\239\001\015\000\000\0016\000\000\004\028\000\000\000\000\004!\005\139\0049\003\140\002\193\000\000\000\000\002\197\000\000\002\212\000\000\002\193\002\244\004\019\002\217\003n\000\000\000\000\002\242\003o\003\253\002\213\005\140\005h\003\141\005i\000\000\000\000\000\000\003\142\003|\000\000\005i\003\143\000\000\004\002\000\000\000\000\003\144\004\003\004\020\000\000\003}\003|\000\000\000\000\002\245\006P\000\000\000\000\002\212\004\135\000\000\000\000\004|\003}\002\238\003l\003\131\000\000\002\198\005\197\002\213\000\140\002\199\000\000\006X\002\198\000\000\000\000\004\007\002\199\000_\000\000\004\023\004~\002\164\004\026\004A\005\240\002\212\004\028\000\000\005i\004!\005\139\0049\003\140\000\000\002\247\000\000\000\000\002\213\000\000\000\000\000\138\000\000\000\000\000\000\000\139\005\241\005\244\005h\002\248\003\253\001\012\005\140\005h\003\141\004\019\000\000\003n\000\000\003\142\003|\003o\000\000\003\143\000\000\004\002\000\000\003\141\003\144\004\003\004\020\000\000\003}\003l\003\131\001\015\002\247\0016\005\202\000\000\000\000\003\154\000\000\000\000\004|\005\217\002\239\000\138\000_\000\000\002\254\000\139\002\164\000\140\004\018\000\000\000\000\000\000\000\141\001g\004\007\001z\000\142\002\212\004\023\004~\003\026\000\000\005i\000\000\002\212\004\028\002\242\005i\004!\002\213\0049\003\140\000\000\000\000\000\000\000\000\002\213\000\000\000\000\004\019\000\000\003n\000\151\000\000\000\000\003o\000\000\000\000\003\028\000\000\005\215\000\000\003\141\000\140\002\245\003l\003m\003\142\000\141\000\000\003\253\003\143\000\142\000\000\000\000\000\140\003\144\000\000\001i\000\000\003|\000\000\001j\006^\000\000\004\002\000\000\004\135\000\000\004\003\004\020\000\000\003}\003l\003\131\000\000\000\000\002\193\000\151\000\000\002\216\003\031\006\135\000\000\004\005\000\000\005\240\002\247\000_\000\000\001w\000\000\002\164\004\026\004A\000\000\000\000\000\140\000\138\003n\004\007\002\248\000\139\003o\004B\000\000\004C\005\241\005\244\005h\000\152\004\028\000\000\000\000\004!\000\000\0049\003\140\006\024\000\000\003\253\000\000\000\000\000\000\006\007\004\019\000\000\003n\000\000\000\140\003|\003o\000\153\002\198\000\000\004\002\000\000\002\199\003\141\004\003\004\020\000\000\003}\003\142\004\144\003l\003\131\003\143\000\000\000\000\000\140\000\000\003\144\000\000\004|\000\141\000\152\000\000\000\000\000\142\000_\000\000\000\000\000\000\002\164\000\000\004A\000\000\001x\005i\004\007\000\000\000\138\000\000\004\023\004~\000\149\000\000\000\153\000\155\000\000\004\028\000\000\000\000\004!\000\151\0049\003\140\000\000\000\000\000\000\000\000\001g\000\175\001h\000\000\000\000\004\019\003|\003n\003l\003\131\000\000\003o\000\000\000\000\000\000\000\000\003\141\000\000\003}\000\000\004E\003\142\000\000\000_\003\253\003\143\000\000\002\164\000\000\004\018\003\144\000\000\000\140\000\155\003|\000\000\000\000\000\141\002\212\004\002\000\000\000\142\000\000\004\003\004\020\000\000\003}\000\177\000\000\000\000\002\213\000_\000\140\000\000\000\000\001i\000\000\000\000\004\005\001j\004\019\000\000\003n\000\000\000\000\000\000\003o\000\151\000\138\000\000\000\000\000\152\000\139\000\000\004\007\000\000\000\000\000\000\004B\000\000\004C\000\000\000\000\006\027\003\141\004\028\000\000\001w\004!\000\000\0049\003\140\000\000\000\153\000\000\000\000\003\253\000\000\003\156\000_\000a\001>\000e\000\000\000\000\000\000\003|\000\000\000\000\000\000\000\000\004\002\003\141\001\"\000\000\004\003\004\020\003\142\003}\000\000\000\140\003\143\003l\003\131\000\000\000\141\003\144\001\027\000\000\000\142\004\146\000\000\000\000\000\000\004\017\000\000\000g\000_\000\000\000\000\000\155\002\164\000\000\004\018\000\000\000\152\004\007\000\000\000\000\000\000\004B\003\253\004\148\000\000\000\187\000\151\000\000\004\028\000\000\000\000\004!\003|\0049\003\140\000\000\001x\004\002\000\153\000\000\000\000\004\003\004\020\000\000\003}\004\019\000\000\003n\000\000\000\000\000\000\003o\000\000\000\000\000\000\003\141\004\021\000\000\000\000\000\000\003\142\000\000\000\000\000\154\003\143\000\000\000\138\000\000\000\000\003\144\000\147\000\000\004\007\000\000\000\000\000\000\004\023\004\024\000\138\003l\003\131\000_\000\149\004\028\000\000\000\155\004!\000\000\0049\003\140\000\193\004\027\000\000\000\000\000_\000\000\003l\003m\002\164\000\157\004\018\000\000\000\000\001\145\000\152\000\000\000\000\001%\000\000\0040\003\141\000\000\001\028\000\000\001\029\003\142\000\203\001\158\000\140\003\143\000\000\000\000\005\240\000\141\003\144\000\000\000\153\000\142\000\000\000\000\000\140\004\019\000\000\003n\000\000\000\141\003\253\003o\001\012\000\142\000\000\000\000\000\000\005\241\005\244\005h\003|\000\000\000\140\000\000\003n\004\002\000\000\000\151\003o\004\003\004\020\000\000\003}\000\000\003l\003\131\001\015\000\000\0016\000\151\000\000\000\000\000\000\000\000\004\021\000\000\000\000\000\155\000\000\000_\000\000\000\000\000\000\002\164\000\000\004\018\000\000\000\000\000\000\000\000\004\007\000\189\000\000\000\000\004\023\004\024\000\000\000\000\000\000\000\000\000\000\004\028\000\000\000\000\004!\000\000\0049\003\140\000\000\005i\000\000\000\000\000\000\000\000\003l\003\129\004\019\000\000\003n\001g\000\000\001h\003o\000\000\000\000\000\000\003\253\000\000\003\141\000\000\000\000\000\000\000\000\003\142\000\000\000\152\003|\003\143\000\000\000\000\000\000\004\002\003\144\003l\003\131\004\003\004\020\000\152\003}\000\197\002\203\000\200\000\201\003|\000\000\000\000\000\000\000\153\000_\000\000\004\021\000\000\002\164\000\000\004\018\003}\000\140\000\000\003n\000\153\000\000\000\140\003o\000\000\001i\000\000\004\007\000\202\001j\000\203\004\023\004\024\000\183\000\000\003l\003m\000\000\004\028\000\000\000\000\004!\000\000\0049\003\140\000\154\004\019\000\000\003n\000\138\000\000\000\000\003o\000\147\000\000\000\155\000\000\001w\003\253\000\184\000\000\000\000\000\000\000\185\000\000\003\141\006\"\000\155\003|\000\157\003\142\001G\000\196\004\002\003\143\003l\003\131\004\003\004\020\003\144\003}\000\157\003~\000\000\000\000\000\000\004d\000\140\002\193\003n\000_\002\197\004]\003o\002\164\000\000\004\018\000\000\000\000\000\000\000\000\000\140\000\000\000\000\000\000\000\000\000\141\000\000\004\007\000\000\000\142\000\000\004\023\004_\000\000\000\000\000_\000\000\003|\004\028\002\164\000\000\004!\000\000\0049\003\140\000\000\004\019\000\000\003n\003}\000\000\000\000\003o\000\000\001x\000\151\003\253\000\000\000\000\000\140\000\000\000\000\000\000\002\198\000\000\003\141\003|\002\199\000\000\000\000\003\142\004\002\003N\000\000\003\143\004\003\004\020\000\000\003}\003\144\003l\003\131\000\000\000\000\004\\\000\000\000\000\000\000\003l\003\131\004]\000_\000a\001\219\000e\000_\000\000\000\000\000\000\002\164\000\000\004\018\000\000\000\000\000\000\000\000\004\007\003|\000\000\004O\004\023\004_\000\000\000\000\000\000\000\000\000\000\004\028\000\000\003}\004!\001\145\0049\003\140\000\000\003&\002\193\000\138\000g\002\197\000\000\000\139\004\019\000\152\003n\001\160\000\000\003\253\003o\000\000\002\238\000\000\003n\000\000\003\141\000\000\003o\003|\000\000\003\142\002\234\000\000\004\002\003\143\000\000\000\153\004\003\004\020\003\144\003}\002\212\000\000\000\000\000\000\004p\000\000\000\000\000\000\000\000\000\000\000\000\004q\002\213\000\000\003l\003\131\000\000\000\000\000\140\000\140\000\183\000\000\002\198\004\020\000\141\003\141\002\199\004\007\000\142\000_\000\000\004\023\004s\002\164\000\000\004\018\000\000\000\000\004\028\003\158\000\000\004!\000\155\0049\003\140\000\000\000\184\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\151\000\000\000\157\005-\000\000\000\000\000\000\000\000\000\000\003\253\004\028\003\141\004\019\004!\003n\0049\003\142\003\253\003o\003|\003\143\000\000\000\000\000\000\004\002\003\144\002\247\003|\004\003\004\020\000\138\003}\004\002\000\000\000\149\000\000\004\003\004n\000\000\003}\003\000\003l\003\131\004]\000\000\001\012\000\000\000\000\000\000\000\000\004{\004\005\000_\000a\0020\000e\000_\000\000\000\000\004\007\002\164\000\000\004\018\004\023\004_\002\212\000\000\004\007\000\000\001\015\004\028\0016\000\000\004!\000\000\0049\003\140\002\213\000\152\000\000\000\000\000\000\000\140\000\000\003\140\000\000\000\000\000\141\000\000\000g\000\000\000\142\000\000\004\019\000\000\003n\000\000\003\141\000\000\003o\000\153\000\000\003\142\003\253\000\000\003\141\003\143\000\000\003l\003\128\003\142\003\144\000\000\003|\003\143\000\000\000\000\000\151\004\002\003\144\000\000\000\000\004\003\004\020\000\000\003}\000\138\003l\003\131\000\000\000\149\004\128\000\000\000\000\000\000\000\000\000_\004|\006T\000\000\000\000\000\000\000_\000\000\000\000\002\247\002\164\000\155\004\018\000\000\000\000\000\000\000\000\004\007\000\000\000\000\000\000\004\023\004~\003\002\000\140\000\191\003n\000\000\004\028\000\000\003o\004!\000\000\0049\003\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\140\004\019\000\000\003n\000\000\000\141\003\253\003o\000\000\000\142\000\000\003l\003\127\003\141\000\000\000\000\003|\000\152\003\142\000\000\001\"\004\002\003\143\000\000\000\000\004\003\004\020\003\144\003}\000\000\003l\003\131\000\000\000\000\001\027\000\151\000\000\000\000\000\000\000\153\004|\006`\001\012\000\000\000\138\000_\000\000\000\000\000\149\002\164\000\000\004\018\000\000\000_\000\000\000\000\004\007\002\164\000\000\000\000\004\023\004~\000\000\000\140\000\154\003n\001\015\004\028\0016\003o\004!\000\000\0049\003\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\019\003|\003n\001g\000\155\001h\003o\000\000\003N\001\128\003\253\000\000\003\141\003}\000\140\000\000\000\000\003\142\000\157\000\141\003|\003\143\000\000\000\142\000\000\004\002\003\144\003l\003\131\004\003\004\020\000\152\003}\000\000\000\000\000\138\000\000\000\000\006c\000\147\000\000\000\000\000_\000\000\006U\000\000\002\164\000\000\004\018\000\151\000_\000\000\000\000\000\153\000\000\000\140\000\000\000\000\001i\000\000\004\007\001%\001j\004\175\004\023\006W\001\028\000\000\001\029\000\000\000\203\004\028\000\000\000\000\004!\000\000\0049\003\140\000\154\004\019\000\000\003n\003|\000\000\000\000\003o\000\000\000\140\000\000\000\000\001w\003\253\000\141\000\000\003}\000\000\000\142\000\000\003\141\000\000\000\155\003|\000\000\003\142\000\000\001\130\004\002\003\143\000\000\000\000\004\003\004\020\003\144\003}\000\157\003l\003m\000_\000\000\004\020\000\000\002\164\000\151\003l\003\131\006U\000\000\000\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000_\000\000\000\000\004\007\004\162\000\000\000\000\004\023\006W\000\000\000\000\000\153\000\000\000\000\004\028\005/\003N\004!\000\000\0049\003\140\000\000\004\028\000\000\000\000\004!\004\193\0049\000\000\000\140\001x\003n\003\253\000\000\000\000\003o\000\154\004\196\000\000\003n\000\000\003\141\003|\003o\000\000\000\000\003\142\004\002\000\000\000\000\003\143\004\003\004\020\000\138\003}\003\144\000\000\000\147\000\155\000\000\000\000\004\202\000\152\003\133\000\000\000\000\006U\000\000\000_\000\000\000\000\000\000\000\157\000\000\000\000\000\000\000\197\003s\000\200\000\201\000\000\000\000\004\007\000\000\000\153\000\000\004\023\006W\000\000\004\239\000\000\000\000\003\136\004\028\001\181\000\000\004!\001\145\0049\003\140\000\000\000\000\000\000\000\138\000\202\000\140\000\203\000\147\000\000\000\183\000\141\001\162\000\000\000\000\000\142\001g\000\000\001h\000_\000\000\003\141\000\000\000\000\000\000\001g\003\142\001h\004\020\000\000\003\143\003|\000\155\000\000\000\000\003\144\000\184\000\000\000\000\003|\000\185\000\151\000\000\003}\000\000\000\000\000\157\000\000\001G\004\203\000\000\003}\000\000\000\000\000\000\000\000\000\140\000\000\000\000\000\000\000\000\000\141\0051\004\241\000\000\000\142\003l\003\131\000\140\004\028\000\000\001i\004!\000\000\0049\001j\000\000\000\140\000\000\000\000\001i\000_\000\000\000\000\001j\004\162\003l\003\131\000\000\000\000\004\206\000\151\000\000\004\242\000\000\004\229\003\140\000\000\000\000\000\000\000\000\000_\000\000\001w\000\000\004\162\000\000\004\243\000\000\003\141\000\000\000\000\001w\000_\000a\002?\000e\003\141\004\196\000\152\003n\000\000\003\142\003\160\003o\000\000\003\143\004\195\000\000\000\000\000\000\003\144\000\000\000\197\003\255\000\200\000\201\000\000\004\196\000\000\003n\000\153\004\202\000\000\003o\003l\003m\000\000\000\000\000\000\000g\000\000\000\000\000\138\000\000\000\000\000\000\000\147\000_\000\000\000\138\000\202\004\202\000\203\000\147\000\000\000\183\000\000\000_\000\152\000\000\000\000\000\000\000\000\000\000\000_\000\000\000\000\000\000\000\000\000\000\001x\000\000\000\197\004\030\000\200\000\201\000\000\000\155\000\000\001x\000\153\000\184\000\000\000\000\000\000\000\185\000\140\000\000\003n\000\000\000\000\000\157\003o\001G\000\140\003l\003\131\000\000\000\000\000\141\000\202\000\140\000\203\000\142\000\000\000\183\000\141\000\000\003|\001\"\000\142\000\000\000\000\000\000\000\000\000\000\004M\000\138\004\203\000\000\003}\000\149\000\000\001\027\000\000\000\000\000\000\000\155\003|\000\151\000\000\000\184\004\204\000\000\000\000\000\185\000\151\001\145\004\203\000\000\003}\000\157\000\000\001G\000\000\002\193\001\145\002\238\002\197\003n\000\000\001\164\004\204\003o\000\000\000\000\000\000\001\179\001\181\004\206\001\166\000\000\004\211\000\000\004\229\003\140\000\000\000\000\000\000\000\140\001\012\000\000\000\000\000\000\000\141\000\000\000\000\000\000\000\142\004\206\000\000\000\000\004\211\000\000\004\229\003\140\003\141\003|\001g\000\000\001h\003\142\000\000\000\000\001\015\003\143\0016\000\140\004S\003}\003\144\002\198\003\136\000\000\000\151\002\199\003\141\000\152\000\000\000\000\000\000\003\142\000\138\000\000\000\152\003\143\000\147\000\000\000\000\000\000\003\144\000\197\004\208\000\200\000\201\000\000\000\000\000_\000\000\000\153\000\000\001\183\001%\000\000\004\218\000\000\000\153\001\028\003\253\001\029\000\140\000\203\000\000\001i\000\000\000\000\000\000\001j\003|\000\202\000\000\000\203\000\000\004\002\000\183\000\000\001\189\004\003\000\203\000\000\003}\000\183\000\000\000\000\000\140\003\141\000\000\000\000\000\000\000\141\000\000\000\000\004U\000\142\000\000\001w\000\155\000\000\000\000\003\162\000\184\000\000\000\152\000\155\000\185\000\000\000\000\000\184\004\007\000\000\000\157\000\185\001G\000\000\003l\003\131\000\000\000\157\002\212\000\151\000\000\000\000\000\000\000\000\000\153\003\140\000\000\000\000\000\000\000\000\002\213\002\193\003l\003\131\002\197\003\246\005\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\141\000\000\000\000\000\154\001g\003\142\001h\003\246\004V\003\143\000\000\000\000\000\000\000\000\003\144\000\000\000\000\000\000\000\000\001g\002\238\001h\003n\000\000\000\000\000\155\003o\001x\003l\003\131\003\135\000\000\000\000\000\000\000\000\000\000\000\000\000\140\002\238\000\157\003n\002\198\000\000\000\000\003o\002\199\000\000\000\000\000\000\003\246\004L\000\152\002\247\000\000\000\000\001g\000\140\001h\000\000\001i\000\000\000\000\000\000\001j\000\000\001I\003\004\000\000\000\201\000\000\000\000\000\140\000\000\000\153\001i\000\000\000\000\000\000\001j\000\000\002\238\000\000\003n\000\000\000\000\000\000\003o\000\000\000\000\000\000\000\000\001w\000\000\000\202\001\145\000\203\000\000\000\000\000\183\000\000\000\000\000\000\002\193\000\000\000\000\002\197\001w\000\140\001\168\000\000\001i\003\253\000\000\000\138\001j\000\000\000\000\000\147\000\000\000\000\000\155\003|\000\000\000\000\000\184\000\000\004\002\0066\000\185\003\253\004\003\003l\003\131\003}\000\157\000\000\001G\000\000\002\212\003|\000\000\000\000\001w\000\000\004\002\004\005\000\000\000\000\004\003\000\000\002\213\003}\003\246\003\247\000\140\000\000\000\000\000\000\002\198\000\000\000\000\004\007\002\199\004\005\000\000\000\140\000\000\000\000\000\000\001x\000\141\003\253\000\000\000\000\000\142\000\000\000\000\002\193\003\140\004\007\002\197\003|\000\000\002\238\001x\003n\004\002\000\000\000\000\003o\004\003\000\000\000\000\003}\000\000\000\000\003\140\000\000\000\000\003\141\000\151\000\000\000\000\000\000\003\142\004\005\000\000\000\000\003\143\000\000\000\000\000\000\000\000\003\144\000\000\000\000\000\000\003\141\002\247\000\000\001x\004\007\003\142\000\000\000\000\000\000\003\143\003l\003\131\000\140\000\000\003\144\003\006\002\198\000\000\000\000\001\145\002\199\003\140\000\000\003l\003\131\000\000\000\000\000\000\000\000\000\000\000\000\003\246\004\001\001\174\001\145\000\000\000\000\002\193\002\212\000\000\002\197\000\000\003\141\000\000\003\246\004X\000\000\003\142\001\176\000\000\002\213\003\143\003l\003\131\000\000\000\000\003\144\003\253\000\000\000\000\000\000\000\152\002\238\000\000\003n\003l\003\131\003|\003o\000\000\001\145\000\000\004\002\003\246\005\031\002\238\004\003\003n\0067\003}\000\000\003o\000\000\000\153\001\178\000\000\003\246\005!\000\000\000\140\000\000\004\005\000\000\002\198\000\000\000\000\000\000\002\199\000\000\000\138\000\000\000\000\000\000\000\147\002\238\000\000\003n\004\007\000\183\000\000\003o\000\000\000\000\002\212\000_\000\000\000\000\002\238\002\247\003n\000\000\000\000\000\000\003o\003\140\002\213\000\000\000\000\000\000\000\000\000\155\000\000\003\008\000\000\000\184\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\157\003\141\000\000\000\000\000\000\000\000\003\142\000\140\000\000\003\253\003\143\000\000\000\141\000\000\000\000\003\144\000\142\003l\003\131\003|\000\000\000\000\003\253\000\000\004\002\000\000\000\000\000\000\004\003\000\000\000\138\003}\003|\000\000\000\147\000\000\000\000\004\002\003\246\005#\000\000\004\003\000\151\004\005\003}\000_\002\212\000\000\000\000\002\247\000\000\003\253\000\000\000\000\000\000\000\000\004\005\000\000\002\213\004\007\000\000\003|\000\000\003\n\003\253\000\000\004\002\000\000\000\000\002\238\004\003\003n\004\007\003}\003|\003o\003\140\000\000\002\193\004\002\000\000\002\197\000\140\004\003\000\138\004\005\003}\000\141\000\147\003\140\000\000\000\142\000\000\000\000\000\000\000\000\000\000\003\141\004\005\000_\000\000\004\007\003\142\000\000\000\000\000\000\003\143\000\000\000\000\000\000\003\141\003\144\000\000\000\000\004\007\003\142\000\000\000\151\003\140\003\143\000\152\000\000\000\000\000\000\003\144\000\000\002\247\000\000\000\000\000\000\000\140\003\140\000\000\000\000\002\198\000\000\000\140\001T\002\199\003\141\003\012\000\141\000\153\000\000\003\142\000\142\000\000\000\000\003\143\000\000\000\000\000\000\003\141\003\144\000\138\000\000\000\000\003\142\000\147\000\000\003\253\003\143\001\195\000\000\000\203\000\000\003\144\000\183\000\000\000_\003|\000\151\000\138\000\138\000\000\004\002\000\147\000\147\000\000\004\003\000\000\000\000\003}\000\000\000\000\000\000\000\000\000_\000_\000\155\000\000\000\000\000\000\000\184\004\005\000\152\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\157\000\000\000\000\000\140\000\000\000\000\000\000\004\007\000\141\001W\000\000\000\000\000\142\000\000\000\153\000\000\000\000\000\000\000\000\003l\003m\000\140\000\140\000\000\003\140\000\000\000\141\000\141\002\212\000\000\000\142\000\142\000\000\000\000\001Y\000\000\000\203\000\138\000\151\000\183\002\213\000\147\000\000\000\000\000\000\003\141\000\152\000\000\000\000\000\138\003\142\000\000\000_\000\147\003\143\000\000\000\151\000\151\000\000\003\144\000\000\000\155\000\000\001W\000_\000\184\000\000\000\000\000\153\000\185\000\000\000\140\000\000\003n\000\000\000\157\000\000\003o\000\000\000\000\000\138\000\000\000\000\000\000\000\147\000\000\000\000\000\000\001\201\000\140\000\203\000\000\000\000\000\183\000\141\000\000\000\000\000\000\000\142\000\000\000\000\000\140\000\000\000\000\000\000\000\000\000\141\000\000\002\247\000\000\000\142\000\000\000\000\000\000\000\000\000\155\000\152\000\000\000\000\000\184\000\000\000\000\003\014\000\185\000\151\000\000\000\000\000\000\000\000\000\157\000\000\000\000\000\140\001T\000\152\000\152\000\151\000\141\000\153\000\000\002\193\000\142\000\000\002\197\000\000\002\193\000\000\000\000\002\197\000\000\000\000\002\176\002\176\001\210\000\000\000\000\000\153\000\153\001\207\000\000\000\203\000\000\000\000\000\183\000\000\000\000\000\000\000\151\000\000\000\000\000\000\000\000\003|\000\000\000\000\000\000\002\178\002\195\000\203\000\203\000\000\000\183\000\183\000\000\003}\000\155\000\000\002\193\000\000\000\184\002\197\000\000\002\238\000\185\000\000\000\000\002\198\002\238\000\000\000\157\002\199\002\198\000\152\000\155\000\155\002\199\000\000\000\184\000\184\000\000\000\000\000\185\000\185\000\000\000\152\000\000\000\000\000\157\000\157\003\\\000\000\000\000\000\000\000\000\000\153\000\138\000\000\000\000\000\000\000\147\000\000\003\\\000\000\000\000\000\000\000\000\000\153\000\000\000\000\000\140\000\000\000\000\000\000\002\198\003^\000\152\000\203\002\199\000\000\000\183\003\141\000\000\000\000\000\000\000\000\000\000\003\176\000\000\000\203\000\138\000\000\000\183\000\182\000\147\003\164\000\000\000\000\000\153\000\000\000\000\000\000\000\155\000\000\000\000\000\000\000\184\002\239\000\140\000\000\000\185\000\000\002\239\000\141\000\155\000\000\000\157\000\142\000\184\000\000\000\000\000\000\000\185\000\183\002\212\003\019\003\020\003\022\000\157\002\212\003\019\006Z\003\022\002\242\000\000\000\138\002\213\000\000\002\242\000\147\000\000\002\213\000\140\000\151\000\000\000\155\000\000\000\141\000\000\000\184\000\000\000\142\000\000\000\185\000\138\003\025\000\000\000\000\000\147\000\157\003\025\002\245\000\000\000\179\001\198\000\000\002\245\000\000\000\000\000\000\000\000\002\212\000\138\000\000\000\138\000\000\000\147\000\151\000\147\000\000\000\000\000\000\000\000\002\213\000\000\000\000\000\000\000\140\000\000\000\000\002\193\000\000\000\141\002\197\000\000\000\000\000\142\002\193\000\000\000\000\002\197\000\000\000\000\000\000\002\247\000\000\000\140\000\000\001\170\002\247\000\000\000\141\000\000\000\000\000\000\000\142\000\000\000\000\002\248\000\000\000\000\000\152\000\151\002\248\000\140\000\000\000\140\000\000\000\000\000\141\000\000\000\141\000\000\000\142\000\000\000\142\000\000\000\000\001\183\000\000\000\000\000\151\002\238\000\153\000\000\000\000\002\198\000\000\000\000\000\140\002\199\002\247\000\000\002\198\000\000\000\152\000\000\002\199\000\000\000\151\000\000\000\151\002\173\000\000\000\000\003\016\000\000\000\000\000\183\000\000\000\000\000\000\000\182\000\000\000\000\000\000\000\000\000\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\138\000\000\000\155\000\000\000\147\000\000\000\184\000\000\000\000\000\000\000\185\000\000\000\152\000\000\000\183\000\000\000\157\000\000\000\138\000\000\000\000\000\000\000\147\000_\000a\002D\000e\000\000\000\000\000\182\000\000\000\152\000\000\000\000\000\153\000\000\000\155\000\000\002\239\000\000\000\184\002\232\000\138\0037\000\185\000\000\000\147\000\000\001\183\000\152\000\157\000\152\000\140\000\153\000\000\002\212\003\024\000\141\003\022\000\183\000g\000\142\002\212\000\000\002\242\000\000\002\234\002\213\002\234\000\000\000\140\000\153\000\000\000\153\002\213\000\141\000\000\000\000\000\183\000\142\000\000\000\155\000\000\000\000\000\000\000\184\003\025\000\151\000\000\000\185\000\000\000\000\002\245\000\000\000\140\000\157\000\183\000\000\000\183\000\141\000\155\000\000\000\000\000\142\000\184\000\151\000\138\000\138\000\185\000\000\000\147\000\147\000\000\000\000\000\157\000\000\000\000\000\000\000\155\000\000\000\155\000\000\000\184\000\000\000\184\000\000\000\185\000\000\000\185\000\151\000\000\000\000\000\157\000\000\000\157\002\247\000_\000a\002\134\000e\000\138\000\000\002\247\000\000\000\147\000\000\000\000\000\000\000\000\002\248\000\000\000\000\000\000\000\000\000\000\000\000\003\018\003B\000\140\000\140\000\000\000\000\000\000\000\141\000\141\000\152\000\000\000\142\000\142\000\000\000\000\000\000\000\000\000g\000\138\003J\000\000\000\000\000\147\003\166\003\219\000\000\002\234\000\152\000\000\000\000\000\000\000\153\000\000\000\000\000\000\001\012\000\140\000\151\000\151\000\000\000\000\000\141\000\000\003Q\002\234\000\142\000\000\000\000\000\000\000\153\000\000\000\152\000_\000a\002\140\000e\000\183\003\221\000\000\001\015\000\138\0016\000\000\000\000\000\147\000\000\000\000\000\000\002\234\000\000\000\140\000\151\000\000\000\153\000\183\000\141\000\000\000\000\000\155\000\142\000\000\000\000\000\184\000\138\000\000\000\000\000\185\000\147\000\000\000g\000\000\003\223\000\157\000\000\000\000\000\000\000\155\000\000\000\183\000\000\000\184\000\000\000\000\000\000\000\185\000\151\000\000\000\000\000\000\000\000\000\157\000\000\000\140\000\000\000\000\000\152\000\152\000\141\000\000\000\000\000\155\000\142\000\000\000\000\000\184\000\138\000\000\000\000\000\185\000\147\000\000\000\000\000\182\000\182\000\157\000\140\000\000\000\153\000\153\000\000\000\141\000\000\000\000\000\000\000\142\000\000\000\000\000\151\001\012\000\152\000\000\000\000\000\000\000\000\000\138\000\000\000\000\000\000\000\147\000\000\000\000\000\000\000\183\000\183\000\000\000\000\000\182\000\000\000\000\000\000\000\151\000\153\001\015\000\000\0016\000\000\000\000\000\140\000\000\000\000\000\000\000\000\000\141\000\152\000\155\000\155\000\142\000\000\000\184\000\184\000\000\000\000\000\185\000\185\000\000\000\000\000\183\000\138\000\157\000\157\000\182\000\147\000\000\000\000\000\000\000\153\000\140\000\000\000\000\000\000\000\000\000\141\000\151\000\000\000\000\000\142\000\000\004,\000\155\000\000\001\012\000\000\000\184\000\000\000\000\000\152\000\185\000\000\000\000\000\000\000\183\000\000\000\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0045\000\151\002\234\000\000\001\015\000\000\0016\000\153\000\152\000\140\000\000\000\000\000\155\000\000\000\141\000\000\000\184\000\000\000\142\000\000\000\185\000\000\000\000\000\000\000\000\002\234\000\157\000\000\000\000\000\000\000\153\000\138\000\183\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\000\004=\000\138\000\151\000\000\000\000\000\147\000\000\000\000\000\152\000\000\000\000\000\000\000\155\000\183\000\000\000\000\000\184\000\138\000\000\000\000\000\185\000\147\000\000\000\000\000\000\002\234\000\157\000\000\000\000\004\167\000\153\000\000\000\000\000\000\000\000\000\155\000\000\000\152\000\138\000\184\000\000\000\140\000\147\000\185\000\000\000\000\000\141\000\000\000\000\000\157\000\142\000\000\000\000\000\140\002\234\000\183\000\000\000\000\000\141\000\153\000\000\000\000\000\142\000\000\000_\000a\002\145\000e\000\000\000\140\000\000\000\000\004\179\000\000\000\141\000\000\000\151\000\155\000\142\000\000\000\152\000\184\000\000\000\000\000\183\000\185\000\000\000\000\000\151\000\000\000\140\000\157\000\000\000\000\000\000\000\141\000\000\002\234\000\000\000\142\000\000\000g\000\153\000\138\000\151\000\000\000\155\000\147\000\000\000\000\000\184\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\138\000\000\000\157\000\000\000\147\000\000\000\000\000\151\000\000\000\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\138\000\000\000\000\000\000\000\147\000\000\000\000\000\000\000\000\004\184\000\000\000\000\000\155\000\000\006\150\000\000\000\184\000\152\000\140\000\000\000\185\004\191\000\000\000\141\000\000\000\000\000\157\000\142\000\000\000\152\000\000\000\000\000\000\000\140\002\234\000\000\000\000\004\200\000\141\000\153\000\000\000\000\000\142\000\000\000\000\000\152\002\234\000\000\000\000\000\000\000\000\000\153\000\140\000\151\000\000\000\000\000\000\000\141\004\222\000\000\000\000\000\142\002\234\000\000\000\183\000\000\000\152\000\153\000\151\000\000\000\000\000\000\000\000\000\000\000\000\000\138\000\183\000\000\000\000\000\147\000\000\000\000\000\000\002\234\000\000\000\000\000\155\000\151\000\153\000\000\000\184\000\000\000\183\000\138\000\185\001\012\000\000\000\147\000\155\000\000\000\157\000\000\000\184\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\157\000\183\000\155\000\000\000\000\000\000\000\184\001\015\000\138\0016\000\185\004\227\000\147\000\000\000\000\000\140\000\157\000\000\000\000\000\152\000\141\000\138\000\000\000\155\000\142\000\147\004\234\000\184\000\000\000\000\000\000\000\185\000\000\000\140\000\152\000\000\002\234\000\157\000\141\000\000\000\000\000\153\000\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\151\002\234\000\000\000\152\000\000\000\000\000\153\000\000\000\000\000\000\000\140\000\000\000\000\000\000\000\000\000\141\000\183\000\000\000\151\000\142\0067\000\000\000\000\000\140\000\000\000\153\000\000\000\000\000\141\000\000\000\138\000\183\000\142\000\138\000\147\000\000\000\000\000\147\000\155\000\000\000\000\000\000\000\184\000\000\000\000\000\151\000\185\000\000\000\000\000\000\000\183\000\138\000\157\000\155\000\000\000\147\000\000\000\184\000\151\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\157\000\000\000\000\000\138\000\000\000\155\000\000\000\147\000\000\000\184\000\000\000\152\000\000\000\185\000\000\000\140\003l\003m\000\140\000\157\000\141\000\000\000\000\000\141\000\142\000\000\000\000\000\142\001K\000\152\000\000\000\000\000\000\000\153\000\000\000\000\000\140\000\000\000\000\000\000\000\000\000\141\000\000\000\000\000\000\000\142\001q\000\000\000\138\000\000\000\151\000\153\000\147\000\151\000\000\000\140\000\152\000\000\000\183\000\000\000\141\000\000\000\000\000\000\000\142\000\000\000\000\000\000\000\140\000\152\003n\000\151\000\000\001\138\003o\000\138\000\183\000\000\000\153\000\147\000\155\000\000\000\000\000\000\000\184\000\000\001\185\000\000\000\185\000\000\000\151\000\153\000\000\000\000\000\157\000\000\000\000\000\000\000\155\000\000\000\140\000\000\000\184\000\183\000\000\000\141\000\185\000\000\000\000\000\142\000\000\000\000\000\157\000\000\000\000\000\138\000\183\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\155\000\000\000\140\000\152\000\184\000\000\000\152\000\141\000\185\000\000\000\151\000\142\000\000\000\155\000\157\000\000\000\000\000\184\000\000\000\000\002\155\000\185\000\000\002\159\000\152\000\153\000\000\000\157\000\153\000\000\000\138\000\000\000\000\000\000\000\147\000\000\000\000\000\151\000\000\000\000\000\000\002\206\000\140\000\152\003|\000\000\000\153\000\141\000\000\000\000\000\183\000\142\000\000\000\183\000\000\000\000\003}\000\138\000\000\000\000\002\221\000\147\000\000\000\000\000\000\000\153\000\000\000\000\000\000\000\000\000\000\000\183\000\155\000\000\000\000\000\155\000\184\000\151\000\000\000\184\000\185\000\000\000\140\000\185\000\000\000\000\000\157\000\141\000\152\000\157\000\183\000\142\000\000\000\155\000\000\000\138\000\000\000\184\000\000\000\147\000\000\000\185\000\138\000\000\000\000\002\223\000\147\000\157\000\000\000\140\000\153\000\000\000\155\000\000\000\141\000\152\000\184\000\151\000\142\000\000\000\185\000\000\003\141\000\000\000\000\000\000\000\157\000\000\000\000\000\138\000\000\000\000\003v\000\147\000\000\000\183\003\170\000\153\000\000\003l\003m\000\000\000\000\000\000\000\151\000\000\000\000\000\140\000\000\000\000\000\000\000\000\000\141\000\000\000\140\000\152\000\142\000\155\000\000\000\141\000\000\000\184\000\183\000\142\000\000\000\185\000\138\003l\003m\000\000\000\147\000\157\003\181\000\000\000\000\000\000\000\000\000\153\000\000\000\000\000\000\000\140\000\151\000\000\000\155\000\000\000\141\000\000\000\184\000\151\000\142\000\140\000\185\003n\000\000\000\152\000\000\003o\000\157\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\186\000\000\000\000\000\000\000\151\000\153\000\140\000\140\000\000\003n\000\152\000\141\000\155\003o\000\000\000\142\000\184\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\157\003\190\000\000\000\000\000\183\000\000\000\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000\000\000\152\000\000\000\000\000\000\000\155\000\000\000\000\000\152\000\184\000\183\000\000\000\000\000\185\000\000\000\000\000\000\000\000\003\211\000\157\000\000\000\000\000\000\000\153\000\000\003\250\000\000\000\000\000\000\000\000\000\153\000\000\000\155\003|\000\000\000\152\000\184\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\003}\000\157\000\000\000\183\000\000\000\000\000\000\004\155\000\000\000\000\000\183\000\000\000\153\000\000\000\000\000\000\003|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\155\000\000\000\152\003}\000\184\000\000\000\000\000\155\000\185\000\000\000\000\000\184\000\183\000\000\000\157\000\185\000\000\000\000\000\000\005\001\000\000\000\157\000\000\000\000\000\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\155\000\000\000\000\000\000\000\184\000\000\000\000\003\141\000\185\000\000\000\000\000\000\000\000\000\000\000\157\000\183\000\000\000\000\000\000\000\000\000\000\003\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\141\000\000\000\155\000\000\000\000\000\000\000\184\000\000\000\000\000\000\000\185\000\000\000\000\000\000\003\174\000\000\000\157")) let semantic_action = [| @@ -1529,9 +1552,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_aexpr = -# 1788 "parser_cocci_menhir.mly" +# 1841 "parser_cocci_menhir.mly" ( Ast0.set_arg_exp _1 ) -# 1535 "parser_cocci_menhir.ml" +# 1558 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1552,12 +1575,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 66 "parser_cocci_menhir.mly" (Parse_aux.list_info) -# 1556 "parser_cocci_menhir.ml" +# 1579 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_aexpr = -# 1790 "parser_cocci_menhir.mly" +# 1843 "parser_cocci_menhir.mly" ( let (nm,lenname,pure,clt) = _1 in let nm = P.clt2mcode nm clt in let lenname = @@ -1565,7 +1588,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Some nm -> Some(P.clt2mcode nm clt) | None -> None in Ast0.wrap(Ast0.MetaExprList(nm,lenname,pure)) ) -# 1569 "parser_cocci_menhir.ml" +# 1592 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1587,9 +1610,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_aexpr = -# 1798 "parser_cocci_menhir.mly" +# 1851 "parser_cocci_menhir.mly" ( Ast0.set_arg_exp(Ast0.wrap(Ast0.TypeExp(_1))) ) -# 1593 "parser_cocci_menhir.ml" +# 1616 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1609,9 +1632,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_any_strict = -# 1842 "parser_cocci_menhir.mly" +# 1895 "parser_cocci_menhir.mly" ( Ast.WhenAny ) -# 1615 "parser_cocci_menhir.ml" +# 1638 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1631,9 +1654,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_any_strict = -# 1843 "parser_cocci_menhir.mly" +# 1896 "parser_cocci_menhir.mly" ( Ast.WhenStrict ) -# 1637 "parser_cocci_menhir.ml" +# 1660 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1653,9 +1676,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_any_strict = -# 1844 "parser_cocci_menhir.mly" +# 1897 "parser_cocci_menhir.mly" ( Ast.WhenForall ) -# 1659 "parser_cocci_menhir.ml" +# 1682 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1675,9 +1698,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_any_strict = -# 1845 "parser_cocci_menhir.mly" +# 1898 "parser_cocci_menhir.mly" ( Ast.WhenExists ) -# 1681 "parser_cocci_menhir.ml" +# 1704 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1699,9 +1722,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1249 "parser_cocci_menhir.mly" +# 1256 "parser_cocci_menhir.mly" ( _1 ) -# 1705 "parser_cocci_menhir.ml" +# 1728 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1733,15 +1756,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 1737 "parser_cocci_menhir.ml" +# 1760 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1251 "parser_cocci_menhir.mly" +# 1258 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) -# 1745 "parser_cocci_menhir.ml" +# 1768 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1773,15 +1796,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 97 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 1777 "parser_cocci_menhir.ml" +# 1800 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1253 "parser_cocci_menhir.mly" +# 1260 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 1785 "parser_cocci_menhir.ml" +# 1808 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1813,15 +1836,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 1817 "parser_cocci_menhir.ml" +# 1840 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1255 "parser_cocci_menhir.mly" +# 1262 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) -# 1825 "parser_cocci_menhir.ml" +# 1848 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1853,15 +1876,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 1857 "parser_cocci_menhir.ml" +# 1880 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1257 "parser_cocci_menhir.mly" +# 1264 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) -# 1865 "parser_cocci_menhir.ml" +# 1888 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1893,15 +1916,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 96 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 1897 "parser_cocci_menhir.ml" +# 1920 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1259 "parser_cocci_menhir.mly" +# 1266 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 1905 "parser_cocci_menhir.ml" +# 1928 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1933,15 +1956,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 95 "parser_cocci_menhir.mly" (Ast_cocci.logicalOp * Data.clt) -# 1937 "parser_cocci_menhir.ml" +# 1960 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1261 "parser_cocci_menhir.mly" +# 1268 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) -# 1945 "parser_cocci_menhir.ml" +# 1968 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1973,15 +1996,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 94 "parser_cocci_menhir.mly" (Data.clt) -# 1977 "parser_cocci_menhir.ml" +# 2000 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1263 "parser_cocci_menhir.mly" +# 1270 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) -# 1985 "parser_cocci_menhir.ml" +# 2008 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2013,15 +2036,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 94 "parser_cocci_menhir.mly" (Data.clt) -# 2017 "parser_cocci_menhir.ml" +# 2040 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1265 "parser_cocci_menhir.mly" +# 1272 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) -# 2025 "parser_cocci_menhir.ml" +# 2048 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2053,15 +2076,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 93 "parser_cocci_menhir.mly" (Data.clt) -# 2057 "parser_cocci_menhir.ml" +# 2080 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1267 "parser_cocci_menhir.mly" +# 1274 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) -# 2065 "parser_cocci_menhir.ml" +# 2088 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2093,15 +2116,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 91 "parser_cocci_menhir.mly" (Data.clt) -# 2097 "parser_cocci_menhir.ml" +# 2120 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1269 "parser_cocci_menhir.mly" +# 1276 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) -# 2105 "parser_cocci_menhir.ml" +# 2128 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2133,15 +2156,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 92 "parser_cocci_menhir.mly" (Data.clt) -# 2137 "parser_cocci_menhir.ml" +# 2160 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1271 "parser_cocci_menhir.mly" +# 1278 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) -# 2145 "parser_cocci_menhir.ml" +# 2168 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2173,15 +2196,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 90 "parser_cocci_menhir.mly" (Data.clt) -# 2177 "parser_cocci_menhir.ml" +# 2200 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1273 "parser_cocci_menhir.mly" +# 1280 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) -# 2185 "parser_cocci_menhir.ml" +# 2208 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2213,15 +2236,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 89 "parser_cocci_menhir.mly" (Data.clt) -# 2217 "parser_cocci_menhir.ml" +# 2240 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1275 "parser_cocci_menhir.mly" +# 1282 "parser_cocci_menhir.mly" ( P.logic_op Ast.OrLog _1 _2 _3 ) -# 2225 "parser_cocci_menhir.ml" +# 2248 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2243,9 +2266,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1249 "parser_cocci_menhir.mly" +# 1256 "parser_cocci_menhir.mly" ( _1 ) -# 2249 "parser_cocci_menhir.ml" +# 2272 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2277,15 +2300,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 2281 "parser_cocci_menhir.ml" +# 2304 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1251 "parser_cocci_menhir.mly" +# 1258 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) -# 2289 "parser_cocci_menhir.ml" +# 2312 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2317,15 +2340,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 97 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 2321 "parser_cocci_menhir.ml" +# 2344 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1253 "parser_cocci_menhir.mly" +# 1260 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 2329 "parser_cocci_menhir.ml" +# 2352 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2357,15 +2380,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 2361 "parser_cocci_menhir.ml" +# 2384 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1255 "parser_cocci_menhir.mly" +# 1262 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) -# 2369 "parser_cocci_menhir.ml" +# 2392 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2397,15 +2420,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 2401 "parser_cocci_menhir.ml" +# 2424 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1257 "parser_cocci_menhir.mly" +# 1264 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) -# 2409 "parser_cocci_menhir.ml" +# 2432 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2437,15 +2460,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 96 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 2441 "parser_cocci_menhir.ml" +# 2464 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1259 "parser_cocci_menhir.mly" +# 1266 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 2449 "parser_cocci_menhir.ml" +# 2472 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2477,15 +2500,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 95 "parser_cocci_menhir.mly" (Ast_cocci.logicalOp * Data.clt) -# 2481 "parser_cocci_menhir.ml" +# 2504 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1261 "parser_cocci_menhir.mly" +# 1268 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) -# 2489 "parser_cocci_menhir.ml" +# 2512 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2517,15 +2540,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 94 "parser_cocci_menhir.mly" (Data.clt) -# 2521 "parser_cocci_menhir.ml" +# 2544 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1263 "parser_cocci_menhir.mly" +# 1270 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) -# 2529 "parser_cocci_menhir.ml" +# 2552 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2557,15 +2580,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 94 "parser_cocci_menhir.mly" (Data.clt) -# 2561 "parser_cocci_menhir.ml" +# 2584 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1265 "parser_cocci_menhir.mly" +# 1272 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) -# 2569 "parser_cocci_menhir.ml" +# 2592 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2597,15 +2620,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 93 "parser_cocci_menhir.mly" (Data.clt) -# 2601 "parser_cocci_menhir.ml" +# 2624 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1267 "parser_cocci_menhir.mly" +# 1274 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) -# 2609 "parser_cocci_menhir.ml" +# 2632 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2637,15 +2660,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 91 "parser_cocci_menhir.mly" (Data.clt) -# 2641 "parser_cocci_menhir.ml" +# 2664 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1269 "parser_cocci_menhir.mly" +# 1276 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) -# 2649 "parser_cocci_menhir.ml" +# 2672 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2677,15 +2700,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 92 "parser_cocci_menhir.mly" (Data.clt) -# 2681 "parser_cocci_menhir.ml" +# 2704 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1271 "parser_cocci_menhir.mly" +# 1278 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) -# 2689 "parser_cocci_menhir.ml" +# 2712 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2717,15 +2740,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 90 "parser_cocci_menhir.mly" (Data.clt) -# 2721 "parser_cocci_menhir.ml" +# 2744 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1273 "parser_cocci_menhir.mly" +# 1280 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) -# 2729 "parser_cocci_menhir.ml" +# 2752 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2757,15 +2780,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 89 "parser_cocci_menhir.mly" (Data.clt) -# 2761 "parser_cocci_menhir.ml" +# 2784 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1275 "parser_cocci_menhir.mly" +# 1282 "parser_cocci_menhir.mly" ( P.logic_op Ast.OrLog _1 _2 _3 ) -# 2769 "parser_cocci_menhir.ml" +# 2792 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2787,9 +2810,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1249 "parser_cocci_menhir.mly" +# 1256 "parser_cocci_menhir.mly" ( _1 ) -# 2793 "parser_cocci_menhir.ml" +# 2816 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2821,15 +2844,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 2825 "parser_cocci_menhir.ml" +# 2848 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1251 "parser_cocci_menhir.mly" +# 1258 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) -# 2833 "parser_cocci_menhir.ml" +# 2856 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2861,15 +2884,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 97 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 2865 "parser_cocci_menhir.ml" +# 2888 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1253 "parser_cocci_menhir.mly" +# 1260 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 2873 "parser_cocci_menhir.ml" +# 2896 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2901,15 +2924,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 2905 "parser_cocci_menhir.ml" +# 2928 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1255 "parser_cocci_menhir.mly" +# 1262 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) -# 2913 "parser_cocci_menhir.ml" +# 2936 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2941,15 +2964,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 2945 "parser_cocci_menhir.ml" +# 2968 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1257 "parser_cocci_menhir.mly" +# 1264 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) -# 2953 "parser_cocci_menhir.ml" +# 2976 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2981,15 +3004,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 96 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 2985 "parser_cocci_menhir.ml" +# 3008 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1259 "parser_cocci_menhir.mly" +# 1266 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 2993 "parser_cocci_menhir.ml" +# 3016 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3021,15 +3044,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 95 "parser_cocci_menhir.mly" (Ast_cocci.logicalOp * Data.clt) -# 3025 "parser_cocci_menhir.ml" +# 3048 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1261 "parser_cocci_menhir.mly" +# 1268 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) -# 3033 "parser_cocci_menhir.ml" +# 3056 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3061,15 +3084,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 94 "parser_cocci_menhir.mly" (Data.clt) -# 3065 "parser_cocci_menhir.ml" +# 3088 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1263 "parser_cocci_menhir.mly" +# 1270 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) -# 3073 "parser_cocci_menhir.ml" +# 3096 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3101,15 +3124,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 94 "parser_cocci_menhir.mly" (Data.clt) -# 3105 "parser_cocci_menhir.ml" +# 3128 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1265 "parser_cocci_menhir.mly" +# 1272 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) -# 3113 "parser_cocci_menhir.ml" +# 3136 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3141,15 +3164,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 93 "parser_cocci_menhir.mly" (Data.clt) -# 3145 "parser_cocci_menhir.ml" +# 3168 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1267 "parser_cocci_menhir.mly" +# 1274 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) -# 3153 "parser_cocci_menhir.ml" +# 3176 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3181,15 +3204,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 91 "parser_cocci_menhir.mly" (Data.clt) -# 3185 "parser_cocci_menhir.ml" +# 3208 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1269 "parser_cocci_menhir.mly" +# 1276 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) -# 3193 "parser_cocci_menhir.ml" +# 3216 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3221,15 +3244,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 92 "parser_cocci_menhir.mly" (Data.clt) -# 3225 "parser_cocci_menhir.ml" +# 3248 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1271 "parser_cocci_menhir.mly" +# 1278 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) -# 3233 "parser_cocci_menhir.ml" +# 3256 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3261,15 +3284,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 90 "parser_cocci_menhir.mly" (Data.clt) -# 3265 "parser_cocci_menhir.ml" +# 3288 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1273 "parser_cocci_menhir.mly" +# 1280 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) -# 3273 "parser_cocci_menhir.ml" +# 3296 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3301,15 +3324,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 89 "parser_cocci_menhir.mly" (Data.clt) -# 3305 "parser_cocci_menhir.ml" +# 3328 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1275 "parser_cocci_menhir.mly" +# 1282 "parser_cocci_menhir.mly" ( P.logic_op Ast.OrLog _1 _2 _3 ) -# 3313 "parser_cocci_menhir.ml" +# 3336 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3331,9 +3354,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1249 "parser_cocci_menhir.mly" +# 1256 "parser_cocci_menhir.mly" ( _1 ) -# 3337 "parser_cocci_menhir.ml" +# 3360 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3365,15 +3388,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 3369 "parser_cocci_menhir.ml" +# 3392 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1251 "parser_cocci_menhir.mly" +# 1258 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) -# 3377 "parser_cocci_menhir.ml" +# 3400 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3405,15 +3428,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 97 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 3409 "parser_cocci_menhir.ml" +# 3432 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1253 "parser_cocci_menhir.mly" +# 1260 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 3417 "parser_cocci_menhir.ml" +# 3440 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3445,15 +3468,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 3449 "parser_cocci_menhir.ml" +# 3472 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1255 "parser_cocci_menhir.mly" +# 1262 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) -# 3457 "parser_cocci_menhir.ml" +# 3480 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3485,15 +3508,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 3489 "parser_cocci_menhir.ml" +# 3512 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1257 "parser_cocci_menhir.mly" +# 1264 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) -# 3497 "parser_cocci_menhir.ml" +# 3520 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3525,15 +3548,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 96 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 3529 "parser_cocci_menhir.ml" +# 3552 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1259 "parser_cocci_menhir.mly" +# 1266 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 3537 "parser_cocci_menhir.ml" +# 3560 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3565,15 +3588,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 95 "parser_cocci_menhir.mly" (Ast_cocci.logicalOp * Data.clt) -# 3569 "parser_cocci_menhir.ml" +# 3592 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1261 "parser_cocci_menhir.mly" +# 1268 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) -# 3577 "parser_cocci_menhir.ml" +# 3600 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3605,15 +3628,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 94 "parser_cocci_menhir.mly" (Data.clt) -# 3609 "parser_cocci_menhir.ml" +# 3632 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1263 "parser_cocci_menhir.mly" +# 1270 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) -# 3617 "parser_cocci_menhir.ml" +# 3640 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3645,15 +3668,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 94 "parser_cocci_menhir.mly" (Data.clt) -# 3649 "parser_cocci_menhir.ml" +# 3672 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1265 "parser_cocci_menhir.mly" +# 1272 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) -# 3657 "parser_cocci_menhir.ml" +# 3680 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3685,15 +3708,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 93 "parser_cocci_menhir.mly" (Data.clt) -# 3689 "parser_cocci_menhir.ml" +# 3712 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1267 "parser_cocci_menhir.mly" +# 1274 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) -# 3697 "parser_cocci_menhir.ml" +# 3720 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3725,15 +3748,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 91 "parser_cocci_menhir.mly" (Data.clt) -# 3729 "parser_cocci_menhir.ml" +# 3752 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1269 "parser_cocci_menhir.mly" +# 1276 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) -# 3737 "parser_cocci_menhir.ml" +# 3760 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3765,15 +3788,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 92 "parser_cocci_menhir.mly" (Data.clt) -# 3769 "parser_cocci_menhir.ml" +# 3792 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1271 "parser_cocci_menhir.mly" +# 1278 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) -# 3777 "parser_cocci_menhir.ml" +# 3800 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3805,15 +3828,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 90 "parser_cocci_menhir.mly" (Data.clt) -# 3809 "parser_cocci_menhir.ml" +# 3832 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1273 "parser_cocci_menhir.mly" +# 1280 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) -# 3817 "parser_cocci_menhir.ml" +# 3840 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3845,15 +3868,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 89 "parser_cocci_menhir.mly" (Data.clt) -# 3849 "parser_cocci_menhir.ml" +# 3872 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1275 "parser_cocci_menhir.mly" +# 1282 "parser_cocci_menhir.mly" ( P.logic_op Ast.OrLog _1 _2 _3 ) -# 3857 "parser_cocci_menhir.ml" +# 3880 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3873,9 +3896,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arity = -# 459 "parser_cocci_menhir.mly" +# 466 "parser_cocci_menhir.mly" ( Ast.UNIQUE ) -# 3879 "parser_cocci_menhir.ml" +# 3902 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3895,9 +3918,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arity = -# 460 "parser_cocci_menhir.mly" +# 467 "parser_cocci_menhir.mly" ( Ast.OPT ) -# 3901 "parser_cocci_menhir.ml" +# 3924 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3917,9 +3940,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arity = -# 461 "parser_cocci_menhir.mly" +# 468 "parser_cocci_menhir.mly" ( Ast.MULTI ) -# 3923 "parser_cocci_menhir.ml" +# 3946 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3934,9 +3957,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_arity = -# 462 "parser_cocci_menhir.mly" +# 469 "parser_cocci_menhir.mly" ( Ast.NONE ) -# 3940 "parser_cocci_menhir.ml" +# 3963 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3967,20 +3990,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 3971 "parser_cocci_menhir.ml" +# 3994 "parser_cocci_menhir.ml" ) = Obj.magic r in let i : 'tv_option_eexpr_ = Obj.magic i in let l : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 3977 "parser_cocci_menhir.ml" +# 4000 "parser_cocci_menhir.ml" ) = Obj.magic l in let _startpos = _startpos_l_ in let _endpos = _endpos_r_ in let _v : 'tv_array_dec = -# 1056 "parser_cocci_menhir.mly" +# 1063 "parser_cocci_menhir.mly" ( (l,i,r) ) -# 3984 "parser_cocci_menhir.ml" +# 4007 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4002,9 +4025,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_assign_expr_eexpr_dot_expressions_ = -# 1221 "parser_cocci_menhir.mly" +# 1228 "parser_cocci_menhir.mly" ( _1 ) -# 4008 "parser_cocci_menhir.ml" +# 4031 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4036,17 +4059,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 108 "parser_cocci_menhir.mly" (Ast_cocci.assignOp * Data.clt) -# 4040 "parser_cocci_menhir.ml" +# 4063 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_eexpr_dot_expressions_ = -# 1223 "parser_cocci_menhir.mly" +# 1230 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt, Ast0.set_arg_exp _3,false)) ) -# 4050 "parser_cocci_menhir.ml" +# 4073 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4078,17 +4101,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 4082 "parser_cocci_menhir.ml" +# 4105 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_eexpr_dot_expressions_ = -# 1227 "parser_cocci_menhir.mly" +# 1234 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Assignment (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) ) -# 4092 "parser_cocci_menhir.ml" +# 4115 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4110,9 +4133,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_assign_expr_eexpr_nest_expressions_ = -# 1221 "parser_cocci_menhir.mly" +# 1228 "parser_cocci_menhir.mly" ( _1 ) -# 4116 "parser_cocci_menhir.ml" +# 4139 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4144,17 +4167,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 108 "parser_cocci_menhir.mly" (Ast_cocci.assignOp * Data.clt) -# 4148 "parser_cocci_menhir.ml" +# 4171 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_eexpr_nest_expressions_ = -# 1223 "parser_cocci_menhir.mly" +# 1230 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt, Ast0.set_arg_exp _3,false)) ) -# 4158 "parser_cocci_menhir.ml" +# 4181 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4186,17 +4209,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 4190 "parser_cocci_menhir.ml" +# 4213 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_eexpr_nest_expressions_ = -# 1227 "parser_cocci_menhir.mly" +# 1234 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Assignment (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) ) -# 4200 "parser_cocci_menhir.ml" +# 4223 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4218,9 +4241,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_assign_expr_expr_invalid_ = -# 1221 "parser_cocci_menhir.mly" +# 1228 "parser_cocci_menhir.mly" ( _1 ) -# 4224 "parser_cocci_menhir.ml" +# 4247 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4252,17 +4275,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 108 "parser_cocci_menhir.mly" (Ast_cocci.assignOp * Data.clt) -# 4256 "parser_cocci_menhir.ml" +# 4279 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_expr_invalid_ = -# 1223 "parser_cocci_menhir.mly" +# 1230 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt, Ast0.set_arg_exp _3,false)) ) -# 4266 "parser_cocci_menhir.ml" +# 4289 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4294,17 +4317,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 4298 "parser_cocci_menhir.ml" +# 4321 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_expr_invalid_ = -# 1227 "parser_cocci_menhir.mly" +# 1234 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Assignment (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) ) -# 4308 "parser_cocci_menhir.ml" +# 4331 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4326,9 +4349,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_assign_expr_bis = -# 1232 "parser_cocci_menhir.mly" +# 1239 "parser_cocci_menhir.mly" ( _1 ) -# 4332 "parser_cocci_menhir.ml" +# 4355 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4360,17 +4383,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 108 "parser_cocci_menhir.mly" (Ast_cocci.assignOp * Data.clt) -# 4364 "parser_cocci_menhir.ml" +# 4387 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_bis = -# 1234 "parser_cocci_menhir.mly" +# 1241 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt, Ast0.set_arg_exp _3,false)) ) -# 4374 "parser_cocci_menhir.ml" +# 4397 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4402,17 +4425,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 4406 "parser_cocci_menhir.ml" +# 4429 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_bis = -# 1238 "parser_cocci_menhir.mly" +# 1245 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Assignment (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) ) -# 4416 "parser_cocci_menhir.ml" +# 4439 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4434,9 +4457,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_basic_expr_eexpr_dot_expressions_ = -# 1218 "parser_cocci_menhir.mly" +# 1225 "parser_cocci_menhir.mly" ( _1 ) -# 4440 "parser_cocci_menhir.ml" +# 4463 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4458,9 +4481,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_basic_expr_eexpr_nest_expressions_ = -# 1218 "parser_cocci_menhir.mly" +# 1225 "parser_cocci_menhir.mly" ( _1 ) -# 4464 "parser_cocci_menhir.ml" +# 4487 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4482,9 +4505,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_basic_expr_expr_invalid_ = -# 1218 "parser_cocci_menhir.mly" +# 1225 "parser_cocci_menhir.mly" ( _1 ) -# 4488 "parser_cocci_menhir.ml" +# 4511 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4516,20 +4539,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 4520 "parser_cocci_menhir.ml" +# 4543 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 4525 "parser_cocci_menhir.ml" +# 4548 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_case_line = -# 920 "parser_cocci_menhir.mly" +# 927 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Default(P.clt2mcode "default" _1,P.clt2mcode ":" _2,_3)) ) -# 4533 "parser_cocci_menhir.ml" +# 4556 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4566,20 +4589,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 4570 "parser_cocci_menhir.ml" +# 4593 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 4576 "parser_cocci_menhir.ml" +# 4599 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_case_line = -# 923 "parser_cocci_menhir.mly" +# 930 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Case(P.clt2mcode "case" _1,_2,P.clt2mcode ":" _3,_4)) ) -# 4583 "parser_cocci_menhir.ml" +# 4606 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4601,9 +4624,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cast_expr_eexpr_dot_expressions_ = -# 1278 "parser_cocci_menhir.mly" +# 1285 "parser_cocci_menhir.mly" ( _1 ) -# 4607 "parser_cocci_menhir.ml" +# 4630 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4640,21 +4663,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 4644 "parser_cocci_menhir.ml" +# 4667 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 4650 "parser_cocci_menhir.ml" +# 4673 "parser_cocci_menhir.ml" ) = Obj.magic lp in let _startpos = _startpos_lp_ in let _endpos = _endpos_e_ in let _v : 'tv_cast_expr_eexpr_dot_expressions_ = -# 1280 "parser_cocci_menhir.mly" +# 1287 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t, P.clt2mcode ")" rp, e)) ) -# 4658 "parser_cocci_menhir.ml" +# 4681 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4676,9 +4699,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cast_expr_eexpr_invalid_ = -# 1278 "parser_cocci_menhir.mly" +# 1285 "parser_cocci_menhir.mly" ( _1 ) -# 4682 "parser_cocci_menhir.ml" +# 4705 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4715,21 +4738,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 4719 "parser_cocci_menhir.ml" +# 4742 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 4725 "parser_cocci_menhir.ml" +# 4748 "parser_cocci_menhir.ml" ) = Obj.magic lp in let _startpos = _startpos_lp_ in let _endpos = _endpos_e_ in let _v : 'tv_cast_expr_eexpr_invalid_ = -# 1280 "parser_cocci_menhir.mly" +# 1287 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t, P.clt2mcode ")" rp, e)) ) -# 4733 "parser_cocci_menhir.ml" +# 4756 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4751,9 +4774,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cast_expr_eexpr_nest_expressions_ = -# 1278 "parser_cocci_menhir.mly" +# 1285 "parser_cocci_menhir.mly" ( _1 ) -# 4757 "parser_cocci_menhir.ml" +# 4780 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4790,21 +4813,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 4794 "parser_cocci_menhir.ml" +# 4817 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 4800 "parser_cocci_menhir.ml" +# 4823 "parser_cocci_menhir.ml" ) = Obj.magic lp in let _startpos = _startpos_lp_ in let _endpos = _endpos_e_ in let _v : 'tv_cast_expr_eexpr_nest_expressions_ = -# 1280 "parser_cocci_menhir.mly" +# 1287 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t, P.clt2mcode ")" rp, e)) ) -# 4808 "parser_cocci_menhir.ml" +# 4831 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4826,9 +4849,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cast_expr_expr_invalid_ = -# 1278 "parser_cocci_menhir.mly" +# 1285 "parser_cocci_menhir.mly" ( _1 ) -# 4832 "parser_cocci_menhir.ml" +# 4855 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4865,21 +4888,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 4869 "parser_cocci_menhir.ml" +# 4892 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 4875 "parser_cocci_menhir.ml" +# 4898 "parser_cocci_menhir.ml" ) = Obj.magic lp in let _startpos = _startpos_lp_ in let _endpos = _endpos_e_ in let _v : 'tv_cast_expr_expr_invalid_ = -# 1280 "parser_cocci_menhir.mly" +# 1287 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t, P.clt2mcode ")" rp, e)) ) -# 4883 "parser_cocci_menhir.ml" +# 4906 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4907,7 +4930,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_choose_iso = # 237 "parser_cocci_menhir.mly" ( List.map P.id2name _2 ) -# 4911 "parser_cocci_menhir.ml" +# 4934 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4933,21 +4956,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 4937 "parser_cocci_menhir.ml" +# 4960 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 4942 "parser_cocci_menhir.ml" +# 4965 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_comma_decls_TEllipsis_decl_ = -# 1583 "parser_cocci_menhir.mly" +# 1636 "parser_cocci_menhir.mly" ( function dot_builder -> [Ast0.wrap(Ast0.PComma(P.clt2mcode "," _1)); dot_builder _2] ) -# 4951 "parser_cocci_menhir.ml" +# 4974 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4974,15 +4997,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 4978 "parser_cocci_menhir.ml" +# 5001 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_comma_decls_TEllipsis_decl_ = -# 1587 "parser_cocci_menhir.mly" +# 1640 "parser_cocci_menhir.mly" ( function dot_builder -> [Ast0.wrap(Ast0.PComma(P.clt2mcode "," _1)); _2] ) -# 4986 "parser_cocci_menhir.ml" +# 5009 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5008,21 +5031,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 5012 "parser_cocci_menhir.ml" +# 5035 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 5017 "parser_cocci_menhir.ml" +# 5040 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_comma_decls_TEllipsis_name_opt_decl_ = -# 1583 "parser_cocci_menhir.mly" +# 1636 "parser_cocci_menhir.mly" ( function dot_builder -> [Ast0.wrap(Ast0.PComma(P.clt2mcode "," _1)); dot_builder _2] ) -# 5026 "parser_cocci_menhir.ml" +# 5049 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5049,15 +5072,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 5053 "parser_cocci_menhir.ml" +# 5076 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_comma_decls_TEllipsis_name_opt_decl_ = -# 1587 "parser_cocci_menhir.mly" +# 1640 "parser_cocci_menhir.mly" ( function dot_builder -> [Ast0.wrap(Ast0.PComma(P.clt2mcode "," _1)); _2] ) -# 5061 "parser_cocci_menhir.ml" +# 5084 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5072,9 +5095,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = -# 1109 "parser_cocci_menhir.mly" +# 1116 "parser_cocci_menhir.mly" ( [] ) -# 5078 "parser_cocci_menhir.ml" +# 5101 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5102,9 +5125,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_d_ in let _endpos = _endpos_r_ in let _v : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = -# 1111 "parser_cocci_menhir.mly" +# 1118 "parser_cocci_menhir.mly" ( (function dot_builder -> [dot_builder d])::r ) -# 5108 "parser_cocci_menhir.ml" +# 5131 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5136,16 +5159,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 5140 "parser_cocci_menhir.ml" +# 5163 "parser_cocci_menhir.ml" ) = Obj.magic c in let i : 'tv_initialize2 = Obj.magic i in let _startpos = _startpos_i_ in let _endpos = _endpos_r_ in let _v : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = -# 1113 "parser_cocci_menhir.mly" +# 1120 "parser_cocci_menhir.mly" ( (function dot_builder -> [i; Ast0.wrap(Ast0.IComma(P.clt2mcode "," c))]):: r ) -# 5149 "parser_cocci_menhir.ml" +# 5172 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5160,9 +5183,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_comma_initializers2_edots_when_TEllipsis_initialize__ = -# 1117 "parser_cocci_menhir.mly" +# 1124 "parser_cocci_menhir.mly" ( [] ) -# 5166 "parser_cocci_menhir.ml" +# 5189 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5194,16 +5217,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 5198 "parser_cocci_menhir.ml" +# 5221 "parser_cocci_menhir.ml" ) = Obj.magic c in let i : 'tv_initialize2 = Obj.magic i in let _startpos = _startpos_i_ in let _endpos = _endpos_r_ in let _v : 'tv_comma_initializers2_edots_when_TEllipsis_initialize__ = -# 1119 "parser_cocci_menhir.mly" +# 1126 "parser_cocci_menhir.mly" ( (function dot_builder -> [i; Ast0.wrap(Ast0.IComma(P.clt2mcode "," c))]):: r ) -# 5207 "parser_cocci_menhir.ml" +# 5230 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5225,9 +5248,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_any_strict_ = -# 1820 "parser_cocci_menhir.mly" +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5231 "parser_cocci_menhir.ml" +# 5254 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5249,9 +5272,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_ctype_ = -# 1820 "parser_cocci_menhir.mly" +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5255 "parser_cocci_menhir.ml" +# 5278 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5273,9 +5296,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_d_ident_ = -# 1820 "parser_cocci_menhir.mly" +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5279 "parser_cocci_menhir.ml" +# 5302 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5297,9 +5320,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_ident_or_const_ = -# 1820 "parser_cocci_menhir.mly" +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5303 "parser_cocci_menhir.ml" +# 5326 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5321,9 +5344,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_meta_ident_ = -# 1820 "parser_cocci_menhir.mly" +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5327 "parser_cocci_menhir.ml" +# 5350 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5345,9 +5368,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_pure_ident_ = -# 1820 "parser_cocci_menhir.mly" +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5351 "parser_cocci_menhir.ml" +# 5374 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5369,9 +5392,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_pure_ident_or_meta_ident_ = -# 1820 "parser_cocci_menhir.mly" +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5375 "parser_cocci_menhir.ml" +# 5398 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5389,13 +5412,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic _1 in + let _1 : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = -# 1820 "parser_cocci_menhir.mly" + let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5399 "parser_cocci_menhir.ml" +# 5422 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5413,13 +5436,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic _1 in + let _1 : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = -# 1820 "parser_cocci_menhir.mly" + let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5423 "parser_cocci_menhir.ml" +# 5446 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5437,13 +5460,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic _1 in + let _1 : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = -# 1820 "parser_cocci_menhir.mly" + let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_seed_ = +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5447 "parser_cocci_menhir.ml" +# 5470 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5461,13 +5484,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = Obj.magic _1 in + let _1 : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_ceq__ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_pos__ = -# 1820 "parser_cocci_menhir.mly" + let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_x_eq_not_ceq__ = +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5471 "parser_cocci_menhir.ml" +# 5494 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5485,13 +5508,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = Obj.magic _1 in + let _1 : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_pos__ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_seed_ = -# 1820 "parser_cocci_menhir.mly" + let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_x_eq_not_pos__ = +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5495 "parser_cocci_menhir.ml" +# 5518 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5513,9 +5536,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_typedef_ident_ = -# 1820 "parser_cocci_menhir.mly" +# 1873 "parser_cocci_menhir.mly" ( _1 ) -# 5519 "parser_cocci_menhir.ml" +# 5542 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5537,9 +5560,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cond_expr_eexpr_dot_expressions_ = -# 1243 "parser_cocci_menhir.mly" +# 1250 "parser_cocci_menhir.mly" ( _1 ) -# 5543 "parser_cocci_menhir.ml" +# 5566 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5581,22 +5604,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let dd : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 5585 "parser_cocci_menhir.ml" +# 5608 "parser_cocci_menhir.ml" ) = Obj.magic dd in let t : 'tv_option_eexpr_ = Obj.magic t in let w : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 5591 "parser_cocci_menhir.ml" +# 5614 "parser_cocci_menhir.ml" ) = Obj.magic w in let l : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic l in let _startpos = _startpos_l_ in let _endpos = _endpos_r_ in let _v : 'tv_cond_expr_eexpr_dot_expressions_ = -# 1245 "parser_cocci_menhir.mly" +# 1252 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t, P.clt2mcode ":" dd, r)) ) -# 5600 "parser_cocci_menhir.ml" +# 5623 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5618,9 +5641,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cond_expr_eexpr_nest_expressions_ = -# 1243 "parser_cocci_menhir.mly" +# 1250 "parser_cocci_menhir.mly" ( _1 ) -# 5624 "parser_cocci_menhir.ml" +# 5647 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5662,22 +5685,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let dd : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 5666 "parser_cocci_menhir.ml" +# 5689 "parser_cocci_menhir.ml" ) = Obj.magic dd in let t : 'tv_option_eexpr_ = Obj.magic t in let w : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 5672 "parser_cocci_menhir.ml" +# 5695 "parser_cocci_menhir.ml" ) = Obj.magic w in let l : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic l in let _startpos = _startpos_l_ in let _endpos = _endpos_r_ in let _v : 'tv_cond_expr_eexpr_nest_expressions_ = -# 1245 "parser_cocci_menhir.mly" +# 1252 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t, P.clt2mcode ":" dd, r)) ) -# 5681 "parser_cocci_menhir.ml" +# 5704 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5699,9 +5722,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cond_expr_expr_invalid_ = -# 1243 "parser_cocci_menhir.mly" +# 1250 "parser_cocci_menhir.mly" ( _1 ) -# 5705 "parser_cocci_menhir.ml" +# 5728 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5743,22 +5766,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let dd : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 5747 "parser_cocci_menhir.ml" +# 5770 "parser_cocci_menhir.ml" ) = Obj.magic dd in let t : 'tv_option_eexpr_ = Obj.magic t in let w : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 5753 "parser_cocci_menhir.ml" +# 5776 "parser_cocci_menhir.ml" ) = Obj.magic w in let l : 'tv_arith_expr_expr_invalid_ = Obj.magic l in let _startpos = _startpos_l_ in let _endpos = _endpos_r_ in let _v : 'tv_cond_expr_expr_invalid_ = -# 1245 "parser_cocci_menhir.mly" +# 1252 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t, P.clt2mcode ":" dd, r)) ) -# 5762 "parser_cocci_menhir.ml" +# 5785 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5779,14 +5802,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 54 "parser_cocci_menhir.mly" (Data.clt) -# 5783 "parser_cocci_menhir.ml" +# 5806 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_const_vol = -# 829 "parser_cocci_menhir.mly" +# 836 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Const _1 ) -# 5790 "parser_cocci_menhir.ml" +# 5813 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5807,14 +5830,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 54 "parser_cocci_menhir.mly" (Data.clt) -# 5811 "parser_cocci_menhir.ml" +# 5834 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_const_vol = -# 830 "parser_cocci_menhir.mly" +# 837 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Volatile _1 ) -# 5818 "parser_cocci_menhir.ml" +# 5841 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5829,9 +5852,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_continue_struct_decl_list = -# 583 "parser_cocci_menhir.mly" +# 590 "parser_cocci_menhir.mly" ( [] ) -# 5835 "parser_cocci_menhir.ml" +# 5858 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5859,9 +5882,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_continue_struct_decl_list = -# 584 "parser_cocci_menhir.mly" +# 591 "parser_cocci_menhir.mly" ( _1@_2 ) -# 5865 "parser_cocci_menhir.ml" +# 5888 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5883,9 +5906,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_continue_struct_decl_list = -# 585 "parser_cocci_menhir.mly" +# 592 "parser_cocci_menhir.mly" ( _1 ) -# 5889 "parser_cocci_menhir.ml" +# 5912 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5917,12 +5940,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 5921 "parser_cocci_menhir.ml" +# 5944 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 5926 "parser_cocci_menhir.ml" +# 5949 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -5932,28 +5955,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 469 "parser_cocci_menhir.mly" +# 476 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 5938 "parser_cocci_menhir.ml" +# 5961 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 5944 "parser_cocci_menhir.ml" +# 5967 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 5951 "parser_cocci_menhir.ml" +# 5974 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 5957 "parser_cocci_menhir.ml" +# 5980 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5985,12 +6008,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 5989 "parser_cocci_menhir.ml" +# 6012 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 5994 "parser_cocci_menhir.ml" +# 6017 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -6000,28 +6023,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 471 "parser_cocci_menhir.mly" +# 478 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 6006 "parser_cocci_menhir.ml" +# 6029 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 6012 "parser_cocci_menhir.ml" +# 6035 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6019 "parser_cocci_menhir.ml" +# 6042 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6025 "parser_cocci_menhir.ml" +# 6048 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6053,12 +6076,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 6057 "parser_cocci_menhir.ml" +# 6080 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 6062 "parser_cocci_menhir.ml" +# 6085 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -6068,28 +6091,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 473 "parser_cocci_menhir.mly" +# 480 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 6074 "parser_cocci_menhir.ml" +# 6097 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 6080 "parser_cocci_menhir.ml" +# 6103 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6087 "parser_cocci_menhir.ml" +# 6110 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6093 "parser_cocci_menhir.ml" +# 6116 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6121,12 +6144,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 6125 "parser_cocci_menhir.ml" +# 6148 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 6130 "parser_cocci_menhir.ml" +# 6153 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -6136,29 +6159,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 475 "parser_cocci_menhir.mly" +# 482 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 6143 "parser_cocci_menhir.ml" +# 6166 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 6149 "parser_cocci_menhir.ml" +# 6172 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6156 "parser_cocci_menhir.ml" +# 6179 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6162 "parser_cocci_menhir.ml" +# 6185 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6199,17 +6222,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 6203 "parser_cocci_menhir.ml" +# 6226 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 47 "parser_cocci_menhir.mly" (string) -# 6208 "parser_cocci_menhir.ml" +# 6231 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let r1 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 6213 "parser_cocci_menhir.ml" +# 6236 "parser_cocci_menhir.ml" ) = Obj.magic r1 in let _startpos = _startpos_r1_ in let _endpos = _endpos_m_ in @@ -6221,33 +6244,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p = p0 in let r = r0 in -# 478 "parser_cocci_menhir.mly" +# 485 "parser_cocci_menhir.mly" ( let nm = (r,P.id2name p) in (* this is only possible when we are in a metavar decl. Otherwise, it will be represented already as a MetaType *) let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), Ast0.Impure (*will be ignored*))) ) -# 6232 "parser_cocci_menhir.ml" +# 6255 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 6238 "parser_cocci_menhir.ml" +# 6261 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6245 "parser_cocci_menhir.ml" +# 6268 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6251 "parser_cocci_menhir.ml" +# 6274 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6279,12 +6302,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 6283 "parser_cocci_menhir.ml" +# 6306 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 6288 "parser_cocci_menhir.ml" +# 6311 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -6294,28 +6317,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 485 "parser_cocci_menhir.mly" +# 492 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 6300 "parser_cocci_menhir.ml" +# 6323 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 6306 "parser_cocci_menhir.ml" +# 6329 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6313 "parser_cocci_menhir.ml" +# 6336 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6319 "parser_cocci_menhir.ml" +# 6342 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6352,17 +6375,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 6356 "parser_cocci_menhir.ml" +# 6379 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 6361 "parser_cocci_menhir.ml" +# 6384 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 6366 "parser_cocci_menhir.ml" +# 6389 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -6374,31 +6397,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty2 = ty20 in let ty1 = ty10 in -# 487 "parser_cocci_menhir.mly" +# 494 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 6383 "parser_cocci_menhir.ml" +# 6406 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 6389 "parser_cocci_menhir.ml" +# 6412 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6396 "parser_cocci_menhir.ml" +# 6419 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6402 "parser_cocci_menhir.ml" +# 6425 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6430,12 +6453,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 6434 "parser_cocci_menhir.ml" +# 6457 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 6439 "parser_cocci_menhir.ml" +# 6462 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -6445,28 +6468,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 469 "parser_cocci_menhir.mly" +# 476 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 6451 "parser_cocci_menhir.ml" +# 6474 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 6457 "parser_cocci_menhir.ml" +# 6480 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6464 "parser_cocci_menhir.ml" +# 6487 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6470 "parser_cocci_menhir.ml" +# 6493 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6498,12 +6521,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 6502 "parser_cocci_menhir.ml" +# 6525 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 6507 "parser_cocci_menhir.ml" +# 6530 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -6513,28 +6536,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 471 "parser_cocci_menhir.mly" +# 478 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 6519 "parser_cocci_menhir.ml" +# 6542 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 6525 "parser_cocci_menhir.ml" +# 6548 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6532 "parser_cocci_menhir.ml" +# 6555 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6538 "parser_cocci_menhir.ml" +# 6561 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6566,12 +6589,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 6570 "parser_cocci_menhir.ml" +# 6593 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 6575 "parser_cocci_menhir.ml" +# 6598 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -6581,28 +6604,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 473 "parser_cocci_menhir.mly" +# 480 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 6587 "parser_cocci_menhir.ml" +# 6610 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 6593 "parser_cocci_menhir.ml" +# 6616 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6600 "parser_cocci_menhir.ml" +# 6623 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6606 "parser_cocci_menhir.ml" +# 6629 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6634,12 +6657,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 6638 "parser_cocci_menhir.ml" +# 6661 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 6643 "parser_cocci_menhir.ml" +# 6666 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -6649,29 +6672,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 475 "parser_cocci_menhir.mly" +# 482 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 6656 "parser_cocci_menhir.ml" +# 6679 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 6662 "parser_cocci_menhir.ml" +# 6685 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6669 "parser_cocci_menhir.ml" +# 6692 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6675 "parser_cocci_menhir.ml" +# 6698 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6712,17 +6735,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 6716 "parser_cocci_menhir.ml" +# 6739 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 47 "parser_cocci_menhir.mly" (string) -# 6721 "parser_cocci_menhir.ml" +# 6744 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let r1 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 6726 "parser_cocci_menhir.ml" +# 6749 "parser_cocci_menhir.ml" ) = Obj.magic r1 in let _startpos = _startpos_r1_ in let _endpos = _endpos_m_ in @@ -6734,33 +6757,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p = p0 in let r = r0 in -# 478 "parser_cocci_menhir.mly" +# 485 "parser_cocci_menhir.mly" ( let nm = (r,P.id2name p) in (* this is only possible when we are in a metavar decl. Otherwise, it will be represented already as a MetaType *) let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), Ast0.Impure (*will be ignored*))) ) -# 6745 "parser_cocci_menhir.ml" +# 6768 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 6751 "parser_cocci_menhir.ml" +# 6774 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6758 "parser_cocci_menhir.ml" +# 6781 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6764 "parser_cocci_menhir.ml" +# 6787 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6792,12 +6815,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 6796 "parser_cocci_menhir.ml" +# 6819 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 6801 "parser_cocci_menhir.ml" +# 6824 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -6807,28 +6830,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 485 "parser_cocci_menhir.mly" +# 492 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 6813 "parser_cocci_menhir.ml" +# 6836 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 6819 "parser_cocci_menhir.ml" +# 6842 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6826 "parser_cocci_menhir.ml" +# 6849 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6832 "parser_cocci_menhir.ml" +# 6855 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6865,17 +6888,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 6869 "parser_cocci_menhir.ml" +# 6892 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 6874 "parser_cocci_menhir.ml" +# 6897 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 6879 "parser_cocci_menhir.ml" +# 6902 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -6887,31 +6910,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty2 = ty20 in let ty1 = ty10 in -# 487 "parser_cocci_menhir.mly" +# 494 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 6896 "parser_cocci_menhir.ml" +# 6919 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 6902 "parser_cocci_menhir.ml" +# 6925 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6909 "parser_cocci_menhir.ml" +# 6932 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6915 "parser_cocci_menhir.ml" +# 6938 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6938,7 +6961,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 6942 "parser_cocci_menhir.ml" +# 6965 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -6947,28 +6970,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 469 "parser_cocci_menhir.mly" +# 476 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 6953 "parser_cocci_menhir.ml" +# 6976 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 6959 "parser_cocci_menhir.ml" +# 6982 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 6966 "parser_cocci_menhir.ml" +# 6989 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 6972 "parser_cocci_menhir.ml" +# 6995 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6995,7 +7018,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 6999 "parser_cocci_menhir.ml" +# 7022 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -7004,28 +7027,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 471 "parser_cocci_menhir.mly" +# 478 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 7010 "parser_cocci_menhir.ml" +# 7033 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 7016 "parser_cocci_menhir.ml" +# 7039 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7023 "parser_cocci_menhir.ml" +# 7046 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7029 "parser_cocci_menhir.ml" +# 7052 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7052,7 +7075,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 7056 "parser_cocci_menhir.ml" +# 7079 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -7061,28 +7084,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 473 "parser_cocci_menhir.mly" +# 480 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 7067 "parser_cocci_menhir.ml" +# 7090 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 7073 "parser_cocci_menhir.ml" +# 7096 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7080 "parser_cocci_menhir.ml" +# 7103 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7086 "parser_cocci_menhir.ml" +# 7109 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7109,7 +7132,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 7113 "parser_cocci_menhir.ml" +# 7136 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let _startpos = _startpos_p00_ in let _endpos = _endpos_m_ in @@ -7118,29 +7141,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 475 "parser_cocci_menhir.mly" +# 482 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 7125 "parser_cocci_menhir.ml" +# 7148 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 7131 "parser_cocci_menhir.ml" +# 7154 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7138 "parser_cocci_menhir.ml" +# 7161 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7144 "parser_cocci_menhir.ml" +# 7167 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7176,12 +7199,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 7180 "parser_cocci_menhir.ml" +# 7203 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 47 "parser_cocci_menhir.mly" (string) -# 7185 "parser_cocci_menhir.ml" +# 7208 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let _startpos = _startpos_r00_ in let _endpos = _endpos_m_ in @@ -7192,33 +7215,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p = p0 in let r = r0 in -# 478 "parser_cocci_menhir.mly" +# 485 "parser_cocci_menhir.mly" ( let nm = (r,P.id2name p) in (* this is only possible when we are in a metavar decl. Otherwise, it will be represented already as a MetaType *) let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), Ast0.Impure (*will be ignored*))) ) -# 7203 "parser_cocci_menhir.ml" +# 7226 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 7209 "parser_cocci_menhir.ml" +# 7232 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7216 "parser_cocci_menhir.ml" +# 7239 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7222 "parser_cocci_menhir.ml" +# 7245 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7245,7 +7268,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 7249 "parser_cocci_menhir.ml" +# 7272 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -7254,28 +7277,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 485 "parser_cocci_menhir.mly" +# 492 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 7260 "parser_cocci_menhir.ml" +# 7283 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 7266 "parser_cocci_menhir.ml" +# 7289 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7273 "parser_cocci_menhir.ml" +# 7296 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7279 "parser_cocci_menhir.ml" +# 7302 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7307,12 +7330,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 7311 "parser_cocci_menhir.ml" +# 7334 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 7316 "parser_cocci_menhir.ml" +# 7339 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let _startpos = _startpos_ty100_ in let _endpos = _endpos_m_ in @@ -7323,31 +7346,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty2 = ty20 in let ty1 = ty10 in -# 487 "parser_cocci_menhir.mly" +# 494 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 7332 "parser_cocci_menhir.ml" +# 7355 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 7338 "parser_cocci_menhir.ml" +# 7361 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7345 "parser_cocci_menhir.ml" +# 7368 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7351 "parser_cocci_menhir.ml" +# 7374 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7374,7 +7397,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 7378 "parser_cocci_menhir.ml" +# 7401 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -7383,28 +7406,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 495 "parser_cocci_menhir.mly" +# 502 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) -# 7389 "parser_cocci_menhir.ml" +# 7412 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 7395 "parser_cocci_menhir.ml" +# 7418 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7402 "parser_cocci_menhir.ml" +# 7425 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7408 "parser_cocci_menhir.ml" +# 7431 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7431,7 +7454,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 7435 "parser_cocci_menhir.ml" +# 7458 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -7440,28 +7463,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 497 "parser_cocci_menhir.mly" +# 504 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) -# 7446 "parser_cocci_menhir.ml" +# 7469 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 7452 "parser_cocci_menhir.ml" +# 7475 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7459 "parser_cocci_menhir.ml" +# 7482 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7465 "parser_cocci_menhir.ml" +# 7488 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7488,7 +7511,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 7492 "parser_cocci_menhir.ml" +# 7515 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -7497,28 +7520,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 499 "parser_cocci_menhir.mly" +# 506 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) -# 7503 "parser_cocci_menhir.ml" +# 7526 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 7509 "parser_cocci_menhir.ml" +# 7532 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7516 "parser_cocci_menhir.ml" +# 7539 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7522 "parser_cocci_menhir.ml" +# 7545 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7551,7 +7574,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s00 : ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 7555 "parser_cocci_menhir.ml" +# 7578 "parser_cocci_menhir.ml" ) = Obj.magic s00 in let _startpos = _startpos_s00_ in let _endpos = _endpos_m_ in @@ -7562,28 +7585,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let i = i0 in let s = s0 in -# 501 "parser_cocci_menhir.mly" +# 508 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) ) -# 7568 "parser_cocci_menhir.ml" +# 7591 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 7574 "parser_cocci_menhir.ml" +# 7597 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7581 "parser_cocci_menhir.ml" +# 7604 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7587 "parser_cocci_menhir.ml" +# 7610 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7623,28 +7646,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let i = i0 in let s = s0 in -# 503 "parser_cocci_menhir.mly" +# 510 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) -# 7629 "parser_cocci_menhir.ml" +# 7652 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 7635 "parser_cocci_menhir.ml" +# 7658 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7642 "parser_cocci_menhir.ml" +# 7665 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7648 "parser_cocci_menhir.ml" +# 7671 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7686,13 +7709,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 7690 "parser_cocci_menhir.ml" +# 7713 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 7696 "parser_cocci_menhir.ml" +# 7719 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let s00 : 'tv_struct_or_union = Obj.magic s00 in let _startpos = _startpos_s00_ in @@ -7711,36 +7734,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 7715 "parser_cocci_menhir.ml" +# 7738 "parser_cocci_menhir.ml" in -# 506 "parser_cocci_menhir.mly" +# 513 "parser_cocci_menhir.mly" ( (if i = None && !Data.in_iso then failwith "structures must be named in the iso file"); Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), P.clt2mcode "{" l, d, P.clt2mcode "}" r)) ) -# 7725 "parser_cocci_menhir.ml" +# 7748 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 7731 "parser_cocci_menhir.ml" +# 7754 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7738 "parser_cocci_menhir.ml" +# 7761 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7744 "parser_cocci_menhir.ml" +# 7767 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7787,13 +7810,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 7791 "parser_cocci_menhir.ml" +# 7814 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 7797 "parser_cocci_menhir.ml" +# 7820 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let x000 : 'tv_ident = Obj.magic x000 in let s00 : 'tv_struct_or_union = Obj.magic s00 in @@ -7816,36 +7839,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 7820 "parser_cocci_menhir.ml" +# 7843 "parser_cocci_menhir.ml" in -# 506 "parser_cocci_menhir.mly" +# 513 "parser_cocci_menhir.mly" ( (if i = None && !Data.in_iso then failwith "structures must be named in the iso file"); Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), P.clt2mcode "{" l, d, P.clt2mcode "}" r)) ) -# 7830 "parser_cocci_menhir.ml" +# 7853 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 7836 "parser_cocci_menhir.ml" +# 7859 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7843 "parser_cocci_menhir.ml" +# 7866 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7849 "parser_cocci_menhir.ml" +# 7872 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7887,18 +7910,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 7891 "parser_cocci_menhir.ml" +# 7914 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 7897 "parser_cocci_menhir.ml" +# 7920 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let s00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 7902 "parser_cocci_menhir.ml" +# 7925 "parser_cocci_menhir.ml" ) = Obj.magic s00 in let _startpos = _startpos_s00_ in let _endpos = _endpos_m_ in @@ -7913,30 +7936,30 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let l = l0 in let s = s0 in -# 512 "parser_cocci_menhir.mly" +# 519 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = s in let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) ) -# 7921 "parser_cocci_menhir.ml" +# 7944 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 7927 "parser_cocci_menhir.ml" +# 7950 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7934 "parser_cocci_menhir.ml" +# 7957 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7940 "parser_cocci_menhir.ml" +# 7963 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7963,7 +7986,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 7967 "parser_cocci_menhir.ml" +# 7990 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let _startpos = _startpos_p00_ in let _endpos = _endpos_m_ in @@ -7972,28 +7995,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 516 "parser_cocci_menhir.mly" +# 523 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) -# 7978 "parser_cocci_menhir.ml" +# 8001 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 7984 "parser_cocci_menhir.ml" +# 8007 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 7991 "parser_cocci_menhir.ml" +# 8014 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 7997 "parser_cocci_menhir.ml" +# 8020 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8030,12 +8053,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 8034 "parser_cocci_menhir.ml" +# 8057 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8039 "parser_cocci_menhir.ml" +# 8062 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -8046,15 +8069,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 469 "parser_cocci_menhir.mly" +# 476 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 8052 "parser_cocci_menhir.ml" +# 8075 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 8058 "parser_cocci_menhir.ml" +# 8081 "parser_cocci_menhir.ml" in let cv = @@ -8062,13 +8085,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 8066 "parser_cocci_menhir.ml" +# 8089 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 8072 "parser_cocci_menhir.ml" +# 8095 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8105,12 +8128,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 8109 "parser_cocci_menhir.ml" +# 8132 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8114 "parser_cocci_menhir.ml" +# 8137 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -8121,15 +8144,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 471 "parser_cocci_menhir.mly" +# 478 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 8127 "parser_cocci_menhir.ml" +# 8150 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 8133 "parser_cocci_menhir.ml" +# 8156 "parser_cocci_menhir.ml" in let cv = @@ -8137,13 +8160,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 8141 "parser_cocci_menhir.ml" +# 8164 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 8147 "parser_cocci_menhir.ml" +# 8170 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8180,12 +8203,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 8184 "parser_cocci_menhir.ml" +# 8207 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8189 "parser_cocci_menhir.ml" +# 8212 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -8196,15 +8219,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 473 "parser_cocci_menhir.mly" +# 480 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 8202 "parser_cocci_menhir.ml" +# 8225 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 8208 "parser_cocci_menhir.ml" +# 8231 "parser_cocci_menhir.ml" in let cv = @@ -8212,13 +8235,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 8216 "parser_cocci_menhir.ml" +# 8239 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 8222 "parser_cocci_menhir.ml" +# 8245 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8255,12 +8278,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 8259 "parser_cocci_menhir.ml" +# 8282 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8264 "parser_cocci_menhir.ml" +# 8287 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -8271,16 +8294,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 475 "parser_cocci_menhir.mly" +# 482 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 8278 "parser_cocci_menhir.ml" +# 8301 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 8284 "parser_cocci_menhir.ml" +# 8307 "parser_cocci_menhir.ml" in let cv = @@ -8288,13 +8311,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 8292 "parser_cocci_menhir.ml" +# 8315 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 8298 "parser_cocci_menhir.ml" +# 8321 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8340,17 +8363,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 8344 "parser_cocci_menhir.ml" +# 8367 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 47 "parser_cocci_menhir.mly" (string) -# 8349 "parser_cocci_menhir.ml" +# 8372 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let r1 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8354 "parser_cocci_menhir.ml" +# 8377 "parser_cocci_menhir.ml" ) = Obj.magic r1 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -8363,20 +8386,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p = p0 in let r = r0 in -# 478 "parser_cocci_menhir.mly" +# 485 "parser_cocci_menhir.mly" ( let nm = (r,P.id2name p) in (* this is only possible when we are in a metavar decl. Otherwise, it will be represented already as a MetaType *) let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), Ast0.Impure (*will be ignored*))) ) -# 8374 "parser_cocci_menhir.ml" +# 8397 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 8380 "parser_cocci_menhir.ml" +# 8403 "parser_cocci_menhir.ml" in let cv = @@ -8384,13 +8407,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 8388 "parser_cocci_menhir.ml" +# 8411 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 8394 "parser_cocci_menhir.ml" +# 8417 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8427,12 +8450,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 8431 "parser_cocci_menhir.ml" +# 8454 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8436 "parser_cocci_menhir.ml" +# 8459 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -8443,15 +8466,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 485 "parser_cocci_menhir.mly" +# 492 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 8449 "parser_cocci_menhir.ml" +# 8472 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 8455 "parser_cocci_menhir.ml" +# 8478 "parser_cocci_menhir.ml" in let cv = @@ -8459,13 +8482,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 8463 "parser_cocci_menhir.ml" +# 8486 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 8469 "parser_cocci_menhir.ml" +# 8492 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8507,17 +8530,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 8511 "parser_cocci_menhir.ml" +# 8534 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 8516 "parser_cocci_menhir.ml" +# 8539 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8521 "parser_cocci_menhir.ml" +# 8544 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -8530,18 +8553,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty2 = ty20 in let ty1 = ty10 in -# 487 "parser_cocci_menhir.mly" +# 494 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 8539 "parser_cocci_menhir.ml" +# 8562 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 8545 "parser_cocci_menhir.ml" +# 8568 "parser_cocci_menhir.ml" in let cv = @@ -8549,13 +8572,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 8553 "parser_cocci_menhir.ml" +# 8576 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 8559 "parser_cocci_menhir.ml" +# 8582 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8592,12 +8615,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 8596 "parser_cocci_menhir.ml" +# 8619 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8601 "parser_cocci_menhir.ml" +# 8624 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -8608,15 +8631,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 469 "parser_cocci_menhir.mly" +# 476 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 8614 "parser_cocci_menhir.ml" +# 8637 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8620 "parser_cocci_menhir.ml" +# 8643 "parser_cocci_menhir.ml" in let cv = @@ -8624,13 +8647,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 8628 "parser_cocci_menhir.ml" +# 8651 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 8634 "parser_cocci_menhir.ml" +# 8657 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8667,12 +8690,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 8671 "parser_cocci_menhir.ml" +# 8694 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8676 "parser_cocci_menhir.ml" +# 8699 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -8683,15 +8706,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 471 "parser_cocci_menhir.mly" +# 478 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 8689 "parser_cocci_menhir.ml" +# 8712 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8695 "parser_cocci_menhir.ml" +# 8718 "parser_cocci_menhir.ml" in let cv = @@ -8699,13 +8722,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 8703 "parser_cocci_menhir.ml" +# 8726 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 8709 "parser_cocci_menhir.ml" +# 8732 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8742,12 +8765,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 8746 "parser_cocci_menhir.ml" +# 8769 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8751 "parser_cocci_menhir.ml" +# 8774 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -8758,15 +8781,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 473 "parser_cocci_menhir.mly" +# 480 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 8764 "parser_cocci_menhir.ml" +# 8787 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8770 "parser_cocci_menhir.ml" +# 8793 "parser_cocci_menhir.ml" in let cv = @@ -8774,13 +8797,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 8778 "parser_cocci_menhir.ml" +# 8801 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 8784 "parser_cocci_menhir.ml" +# 8807 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8817,12 +8840,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 8821 "parser_cocci_menhir.ml" +# 8844 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8826 "parser_cocci_menhir.ml" +# 8849 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -8833,16 +8856,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 475 "parser_cocci_menhir.mly" +# 482 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 8840 "parser_cocci_menhir.ml" +# 8863 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8846 "parser_cocci_menhir.ml" +# 8869 "parser_cocci_menhir.ml" in let cv = @@ -8850,13 +8873,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 8854 "parser_cocci_menhir.ml" +# 8877 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 8860 "parser_cocci_menhir.ml" +# 8883 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8902,17 +8925,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 8906 "parser_cocci_menhir.ml" +# 8929 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 47 "parser_cocci_menhir.mly" (string) -# 8911 "parser_cocci_menhir.ml" +# 8934 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let r1 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8916 "parser_cocci_menhir.ml" +# 8939 "parser_cocci_menhir.ml" ) = Obj.magic r1 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -8925,20 +8948,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p = p0 in let r = r0 in -# 478 "parser_cocci_menhir.mly" +# 485 "parser_cocci_menhir.mly" ( let nm = (r,P.id2name p) in (* this is only possible when we are in a metavar decl. Otherwise, it will be represented already as a MetaType *) let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), Ast0.Impure (*will be ignored*))) ) -# 8936 "parser_cocci_menhir.ml" +# 8959 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8942 "parser_cocci_menhir.ml" +# 8965 "parser_cocci_menhir.ml" in let cv = @@ -8946,13 +8969,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 8950 "parser_cocci_menhir.ml" +# 8973 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 8956 "parser_cocci_menhir.ml" +# 8979 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8989,12 +9012,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 8993 "parser_cocci_menhir.ml" +# 9016 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 8998 "parser_cocci_menhir.ml" +# 9021 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9005,15 +9028,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 485 "parser_cocci_menhir.mly" +# 492 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 9011 "parser_cocci_menhir.ml" +# 9034 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 9017 "parser_cocci_menhir.ml" +# 9040 "parser_cocci_menhir.ml" in let cv = @@ -9021,13 +9044,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9025 "parser_cocci_menhir.ml" +# 9048 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9031 "parser_cocci_menhir.ml" +# 9054 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9069,17 +9092,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 9073 "parser_cocci_menhir.ml" +# 9096 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 9078 "parser_cocci_menhir.ml" +# 9101 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 9083 "parser_cocci_menhir.ml" +# 9106 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9092,18 +9115,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty2 = ty20 in let ty1 = ty10 in -# 487 "parser_cocci_menhir.mly" +# 494 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 9101 "parser_cocci_menhir.ml" +# 9124 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 9107 "parser_cocci_menhir.ml" +# 9130 "parser_cocci_menhir.ml" in let cv = @@ -9111,13 +9134,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9115 "parser_cocci_menhir.ml" +# 9138 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9121 "parser_cocci_menhir.ml" +# 9144 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9149,7 +9172,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 9153 "parser_cocci_menhir.ml" +# 9176 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9159,15 +9182,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 469 "parser_cocci_menhir.mly" +# 476 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 9165 "parser_cocci_menhir.ml" +# 9188 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 9171 "parser_cocci_menhir.ml" +# 9194 "parser_cocci_menhir.ml" in let cv = @@ -9175,13 +9198,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9179 "parser_cocci_menhir.ml" +# 9202 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9185 "parser_cocci_menhir.ml" +# 9208 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9213,7 +9236,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 9217 "parser_cocci_menhir.ml" +# 9240 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9223,15 +9246,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 471 "parser_cocci_menhir.mly" +# 478 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 9229 "parser_cocci_menhir.ml" +# 9252 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 9235 "parser_cocci_menhir.ml" +# 9258 "parser_cocci_menhir.ml" in let cv = @@ -9239,13 +9262,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9243 "parser_cocci_menhir.ml" +# 9266 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9249 "parser_cocci_menhir.ml" +# 9272 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9277,7 +9300,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 9281 "parser_cocci_menhir.ml" +# 9304 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9287,15 +9310,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 473 "parser_cocci_menhir.mly" +# 480 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 9293 "parser_cocci_menhir.ml" +# 9316 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 9299 "parser_cocci_menhir.ml" +# 9322 "parser_cocci_menhir.ml" in let cv = @@ -9303,13 +9326,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9307 "parser_cocci_menhir.ml" +# 9330 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9313 "parser_cocci_menhir.ml" +# 9336 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9341,7 +9364,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 9345 "parser_cocci_menhir.ml" +# 9368 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9351,16 +9374,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 475 "parser_cocci_menhir.mly" +# 482 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 9358 "parser_cocci_menhir.ml" +# 9381 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 9364 "parser_cocci_menhir.ml" +# 9387 "parser_cocci_menhir.ml" in let cv = @@ -9368,13 +9391,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9372 "parser_cocci_menhir.ml" +# 9395 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9378 "parser_cocci_menhir.ml" +# 9401 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9415,12 +9438,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 9419 "parser_cocci_menhir.ml" +# 9442 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 47 "parser_cocci_menhir.mly" (string) -# 9424 "parser_cocci_menhir.ml" +# 9447 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9432,20 +9455,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p = p0 in let r = r0 in -# 478 "parser_cocci_menhir.mly" +# 485 "parser_cocci_menhir.mly" ( let nm = (r,P.id2name p) in (* this is only possible when we are in a metavar decl. Otherwise, it will be represented already as a MetaType *) let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), Ast0.Impure (*will be ignored*))) ) -# 9443 "parser_cocci_menhir.ml" +# 9466 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 9449 "parser_cocci_menhir.ml" +# 9472 "parser_cocci_menhir.ml" in let cv = @@ -9453,13 +9476,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9457 "parser_cocci_menhir.ml" +# 9480 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9463 "parser_cocci_menhir.ml" +# 9486 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9491,7 +9514,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 9495 "parser_cocci_menhir.ml" +# 9518 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9501,15 +9524,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 485 "parser_cocci_menhir.mly" +# 492 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 9507 "parser_cocci_menhir.ml" +# 9530 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 9513 "parser_cocci_menhir.ml" +# 9536 "parser_cocci_menhir.ml" in let cv = @@ -9517,13 +9540,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9521 "parser_cocci_menhir.ml" +# 9544 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9527 "parser_cocci_menhir.ml" +# 9550 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9560,12 +9583,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 9564 "parser_cocci_menhir.ml" +# 9587 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 9569 "parser_cocci_menhir.ml" +# 9592 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9577,18 +9600,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty2 = ty20 in let ty1 = ty10 in -# 487 "parser_cocci_menhir.mly" +# 494 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 9586 "parser_cocci_menhir.ml" +# 9609 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 9592 "parser_cocci_menhir.ml" +# 9615 "parser_cocci_menhir.ml" in let cv = @@ -9596,13 +9619,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9600 "parser_cocci_menhir.ml" +# 9623 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9606 "parser_cocci_menhir.ml" +# 9629 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9634,7 +9657,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 9638 "parser_cocci_menhir.ml" +# 9661 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9644,15 +9667,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 495 "parser_cocci_menhir.mly" +# 502 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) -# 9650 "parser_cocci_menhir.ml" +# 9673 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 9656 "parser_cocci_menhir.ml" +# 9679 "parser_cocci_menhir.ml" in let cv = @@ -9660,13 +9683,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9664 "parser_cocci_menhir.ml" +# 9687 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9670 "parser_cocci_menhir.ml" +# 9693 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9698,7 +9721,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 9702 "parser_cocci_menhir.ml" +# 9725 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9708,15 +9731,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 497 "parser_cocci_menhir.mly" +# 504 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) -# 9714 "parser_cocci_menhir.ml" +# 9737 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 9720 "parser_cocci_menhir.ml" +# 9743 "parser_cocci_menhir.ml" in let cv = @@ -9724,13 +9747,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9728 "parser_cocci_menhir.ml" +# 9751 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9734 "parser_cocci_menhir.ml" +# 9757 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9762,7 +9785,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 9766 "parser_cocci_menhir.ml" +# 9789 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9772,15 +9795,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 499 "parser_cocci_menhir.mly" +# 506 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) -# 9778 "parser_cocci_menhir.ml" +# 9801 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 9784 "parser_cocci_menhir.ml" +# 9807 "parser_cocci_menhir.ml" in let cv = @@ -9788,13 +9811,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9792 "parser_cocci_menhir.ml" +# 9815 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9798 "parser_cocci_menhir.ml" +# 9821 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9832,7 +9855,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s00 : ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 9836 "parser_cocci_menhir.ml" +# 9859 "parser_cocci_menhir.ml" ) = Obj.magic s00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -9844,15 +9867,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let i = i0 in let s = s0 in -# 501 "parser_cocci_menhir.mly" +# 508 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) ) -# 9850 "parser_cocci_menhir.ml" +# 9873 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 9856 "parser_cocci_menhir.ml" +# 9879 "parser_cocci_menhir.ml" in let cv = @@ -9860,13 +9883,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9864 "parser_cocci_menhir.ml" +# 9887 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9870 "parser_cocci_menhir.ml" +# 9893 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9912,15 +9935,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let i = i0 in let s = s0 in -# 503 "parser_cocci_menhir.mly" +# 510 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) -# 9918 "parser_cocci_menhir.ml" +# 9941 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 9924 "parser_cocci_menhir.ml" +# 9947 "parser_cocci_menhir.ml" in let cv = @@ -9928,13 +9951,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 9932 "parser_cocci_menhir.ml" +# 9955 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 9938 "parser_cocci_menhir.ml" +# 9961 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9981,13 +10004,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 9985 "parser_cocci_menhir.ml" +# 10008 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 9991 "parser_cocci_menhir.ml" +# 10014 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let s00 : 'tv_struct_or_union = Obj.magic s00 in let x0 : 'tv_const_vol = Obj.magic x0 in @@ -10007,23 +10030,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 10011 "parser_cocci_menhir.ml" +# 10034 "parser_cocci_menhir.ml" in -# 506 "parser_cocci_menhir.mly" +# 513 "parser_cocci_menhir.mly" ( (if i = None && !Data.in_iso then failwith "structures must be named in the iso file"); Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), P.clt2mcode "{" l, d, P.clt2mcode "}" r)) ) -# 10021 "parser_cocci_menhir.ml" +# 10044 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 10027 "parser_cocci_menhir.ml" +# 10050 "parser_cocci_menhir.ml" in let cv = @@ -10031,13 +10054,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 10035 "parser_cocci_menhir.ml" +# 10058 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 10041 "parser_cocci_menhir.ml" +# 10064 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10089,13 +10112,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 10093 "parser_cocci_menhir.ml" +# 10116 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 10099 "parser_cocci_menhir.ml" +# 10122 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let x000 : 'tv_ident = Obj.magic x000 in let s00 : 'tv_struct_or_union = Obj.magic s00 in @@ -10119,23 +10142,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 10123 "parser_cocci_menhir.ml" +# 10146 "parser_cocci_menhir.ml" in -# 506 "parser_cocci_menhir.mly" +# 513 "parser_cocci_menhir.mly" ( (if i = None && !Data.in_iso then failwith "structures must be named in the iso file"); Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), P.clt2mcode "{" l, d, P.clt2mcode "}" r)) ) -# 10133 "parser_cocci_menhir.ml" +# 10156 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 10139 "parser_cocci_menhir.ml" +# 10162 "parser_cocci_menhir.ml" in let cv = @@ -10143,13 +10166,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 10147 "parser_cocci_menhir.ml" +# 10170 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 10153 "parser_cocci_menhir.ml" +# 10176 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10196,18 +10219,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 10200 "parser_cocci_menhir.ml" +# 10223 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 10206 "parser_cocci_menhir.ml" +# 10229 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let s00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 10211 "parser_cocci_menhir.ml" +# 10234 "parser_cocci_menhir.ml" ) = Obj.magic s00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -10223,17 +10246,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let l = l0 in let s = s0 in -# 512 "parser_cocci_menhir.mly" +# 519 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = s in let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) ) -# 10231 "parser_cocci_menhir.ml" +# 10254 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 10237 "parser_cocci_menhir.ml" +# 10260 "parser_cocci_menhir.ml" in let cv = @@ -10241,13 +10264,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 10245 "parser_cocci_menhir.ml" +# 10268 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 10251 "parser_cocci_menhir.ml" +# 10274 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10279,7 +10302,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 10283 "parser_cocci_menhir.ml" +# 10306 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -10289,15 +10312,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 516 "parser_cocci_menhir.mly" +# 523 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) -# 10295 "parser_cocci_menhir.ml" +# 10318 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 10301 "parser_cocci_menhir.ml" +# 10324 "parser_cocci_menhir.ml" in let cv = @@ -10305,13 +10328,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 10309 "parser_cocci_menhir.ml" +# 10332 "parser_cocci_menhir.ml" in -# 529 "parser_cocci_menhir.mly" +# 536 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 10315 "parser_cocci_menhir.ml" +# 10338 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10332,14 +10355,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 10336 "parser_cocci_menhir.ml" +# 10359 "parser_cocci_menhir.ml" ) = Obj.magic r in let _startpos = _startpos_r_ in let _endpos = _endpos_r_ in let _v : 'tv_ctype = -# 531 "parser_cocci_menhir.mly" +# 538 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,None)) ) -# 10343 "parser_cocci_menhir.ml" +# 10366 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10360,14 +10383,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 10364 "parser_cocci_menhir.ml" +# 10387 "parser_cocci_menhir.ml" ) = Obj.magic r in let _startpos = _startpos_r_ in let _endpos = _endpos_r_ in let _v : 'tv_ctype = -# 533 "parser_cocci_menhir.mly" +# 540 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,None)) ) -# 10371 "parser_cocci_menhir.ml" +# 10394 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10398,22 +10421,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 10402 "parser_cocci_menhir.ml" +# 10425 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 10408 "parser_cocci_menhir.ml" +# 10431 "parser_cocci_menhir.ml" ) = Obj.magic lp in let _startpos = _startpos_lp_ in let _endpos = _endpos_rp_ in let _v : 'tv_ctype = -# 535 "parser_cocci_menhir.mly" +# 542 "parser_cocci_menhir.mly" ( let (mids,code) = t in Ast0.wrap (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) -# 10417 "parser_cocci_menhir.ml" +# 10440 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10441,7 +10464,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_d_ident = -# 1047 "parser_cocci_menhir.mly" +# 1054 "parser_cocci_menhir.mly" ( (_1, function t -> List.fold_right @@ -10450,7 +10473,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Ast0.wrap (Ast0.Array(rest,P.clt2mcode "[" l,i,P.clt2mcode "]" r))) _2 t) ) -# 10454 "parser_cocci_menhir.ml" +# 10477 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10478,9 +10501,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_t_ in let _endpos = _endpos_i_ in let _v : 'tv_decl = -# 803 "parser_cocci_menhir.mly" +# 810 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Param(t, Some i)) ) -# 10484 "parser_cocci_menhir.ml" +# 10507 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10502,9 +10525,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_t_ in let _endpos = _endpos_t_ in let _v : 'tv_decl = -# 804 "parser_cocci_menhir.mly" +# 811 "parser_cocci_menhir.mly" ( (*verify in FunDecl*) Ast0.wrap(Ast0.Param(t, None)) ) -# 10508 "parser_cocci_menhir.ml" +# 10531 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10560,42 +10583,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp1 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 10564 "parser_cocci_menhir.ml" +# 10587 "parser_cocci_menhir.ml" ) = Obj.magic rp1 in let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in let lp1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 10570 "parser_cocci_menhir.ml" +# 10593 "parser_cocci_menhir.ml" ) = Obj.magic lp1 in let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 10575 "parser_cocci_menhir.ml" +# 10598 "parser_cocci_menhir.ml" ) = Obj.magic rp in let i : 'tv_ident = Obj.magic i in let s : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 10581 "parser_cocci_menhir.ml" +# 10604 "parser_cocci_menhir.ml" ) = Obj.magic s in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 10586 "parser_cocci_menhir.ml" +# 10609 "parser_cocci_menhir.ml" ) = Obj.magic lp in let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos_t_ in let _endpos = _endpos_rp1_ in let _v : 'tv_decl = -# 807 "parser_cocci_menhir.mly" +# 814 "parser_cocci_menhir.mly" ( let fnptr = Ast0.wrap (Ast0.FunctionPointer (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp, P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in Ast0.wrap(Ast0.Param(fnptr, Some i)) ) -# 10599 "parser_cocci_menhir.ml" +# 10622 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10616,15 +10639,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 10620 "parser_cocci_menhir.ml" +# 10643 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl = -# 814 "parser_cocci_menhir.mly" +# 821 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = _1 in Ast0.wrap(Ast0.MetaParam(P.clt2mcode nm clt,pure)) ) -# 10628 "parser_cocci_menhir.ml" +# 10651 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10645,14 +10668,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 10649 "parser_cocci_menhir.ml" +# 10672 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl_ident = -# 1532 "parser_cocci_menhir.mly" +# 1585 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 10656 "parser_cocci_menhir.ml" +# 10679 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10673,15 +10696,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 62 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 10677 "parser_cocci_menhir.ml" +# 10700 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl_ident = -# 1534 "parser_cocci_menhir.mly" +# 1587 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,clt) = _1 in Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) ) -# 10685 "parser_cocci_menhir.ml" +# 10708 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10696,9 +10719,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_decl_list_decl_ = -# 1554 "parser_cocci_menhir.mly" +# 1607 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS([])) ) -# 10702 "parser_cocci_menhir.ml" +# 10725 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10720,13 +10743,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl_list_decl_ = -# 1556 "parser_cocci_menhir.mly" +# 1609 "parser_cocci_menhir.mly" (let circle x = match Ast0.unwrap x with Ast0.Pcircles(_) -> true | _ -> false in if List.exists circle _1 then Ast0.wrap(Ast0.CIRCLES(_1)) else Ast0.wrap(Ast0.DOTS(_1)) ) -# 10730 "parser_cocci_menhir.ml" +# 10753 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10741,9 +10764,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_decl_list_name_opt_decl_ = -# 1554 "parser_cocci_menhir.mly" +# 1607 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS([])) ) -# 10747 "parser_cocci_menhir.ml" +# 10770 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10765,13 +10788,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl_list_name_opt_decl_ = -# 1556 "parser_cocci_menhir.mly" +# 1609 "parser_cocci_menhir.mly" (let circle x = match Ast0.unwrap x with Ast0.Pcircles(_) -> true | _ -> false in if List.exists circle _1 then Ast0.wrap(Ast0.CIRCLES(_1)) else Ast0.wrap(Ast0.DOTS(_1)) ) -# 10775 "parser_cocci_menhir.ml" +# 10798 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10793,9 +10816,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl_list_start_decl_ = -# 1563 "parser_cocci_menhir.mly" +# 1616 "parser_cocci_menhir.mly" ( [_1] ) -# 10799 "parser_cocci_menhir.ml" +# 10822 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10827,15 +10850,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 10831 "parser_cocci_menhir.ml" +# 10854 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_one_dec_decl_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_decl_list_start_decl_ = -# 1565 "parser_cocci_menhir.mly" +# 1618 "parser_cocci_menhir.mly" ( _1::Ast0.wrap(Ast0.PComma(P.clt2mcode "," _2))::_3 ) -# 10839 "parser_cocci_menhir.ml" +# 10862 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10862,15 +10885,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 10866 "parser_cocci_menhir.ml" +# 10889 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_decl_list_start_decl_ = -# 1567 "parser_cocci_menhir.mly" +# 1620 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." _1)):: (List.concat(List.map (function x -> x (P.mkpdots "...")) _2)) ) -# 10874 "parser_cocci_menhir.ml" +# 10897 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10892,9 +10915,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl_list_start_name_opt_decl_ = -# 1563 "parser_cocci_menhir.mly" +# 1616 "parser_cocci_menhir.mly" ( [_1] ) -# 10898 "parser_cocci_menhir.ml" +# 10921 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10926,15 +10949,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 10930 "parser_cocci_menhir.ml" +# 10953 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_one_dec_name_opt_decl_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_decl_list_start_name_opt_decl_ = -# 1565 "parser_cocci_menhir.mly" +# 1618 "parser_cocci_menhir.mly" ( _1::Ast0.wrap(Ast0.PComma(P.clt2mcode "," _2))::_3 ) -# 10938 "parser_cocci_menhir.ml" +# 10961 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10961,15 +10984,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 10965 "parser_cocci_menhir.ml" +# 10988 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_decl_list_start_name_opt_decl_ = -# 1567 "parser_cocci_menhir.mly" +# 1620 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." _1)):: (List.concat(List.map (function x -> x (P.mkpdots "...")) _2)) ) -# 10973 "parser_cocci_menhir.ml" +# 10996 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10990,15 +11013,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 10994 "parser_cocci_menhir.ml" +# 11017 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl_statement = -# 1125 "parser_cocci_menhir.mly" +# 1132 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = _1 in [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] ) -# 11002 "parser_cocci_menhir.ml" +# 11025 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11020,13 +11043,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl_statement = -# 1128 "parser_cocci_menhir.mly" +# 1135 "parser_cocci_menhir.mly" ( List.map (function x -> Ast0.wrap (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x))) _1 ) -# 11030 "parser_cocci_menhir.ml" +# 11053 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11048,9 +11071,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl_statement = -# 1133 "parser_cocci_menhir.mly" +# 1140 "parser_cocci_menhir.mly" ( [_1] ) -# 11054 "parser_cocci_menhir.ml" +# 11077 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11081,18 +11104,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 11085 "parser_cocci_menhir.ml" +# 11108 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let t : 'tv_midzero_list_fun_start_fun_start_ = Obj.magic t in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 11091 "parser_cocci_menhir.ml" +# 11114 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_decl_statement = -# 1142 "parser_cocci_menhir.mly" +# 1149 "parser_cocci_menhir.mly" ( let (mids,code) = t in if List.for_all (function x -> @@ -11102,7 +11125,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct else [Ast0.wrap(Ast0.Disj(P.clt2mcode "(" _1, code, mids, P.clt2mcode ")" _3))] ) -# 11106 "parser_cocci_menhir.ml" +# 11129 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11123,15 +11146,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 11127 "parser_cocci_menhir.ml" +# 11150 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl_statement_expr = -# 1155 "parser_cocci_menhir.mly" +# 1162 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = _1 in [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] ) -# 11135 "parser_cocci_menhir.ml" +# 11158 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11153,13 +11176,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl_statement_expr = -# 1158 "parser_cocci_menhir.mly" +# 1165 "parser_cocci_menhir.mly" ( List.map (function x -> Ast0.wrap (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x))) _1 ) -# 11163 "parser_cocci_menhir.ml" +# 11186 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11181,9 +11204,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_decl_statement_expr = -# 1163 "parser_cocci_menhir.mly" +# 1170 "parser_cocci_menhir.mly" ( [_1] ) -# 11187 "parser_cocci_menhir.ml" +# 11210 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11214,18 +11237,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 11218 "parser_cocci_menhir.ml" +# 11241 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let t : 'tv_midzero_list_fun_after_stm_fun_after_dots_or_ = Obj.magic t in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 11224 "parser_cocci_menhir.ml" +# 11247 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_decl_statement_expr = -# 1172 "parser_cocci_menhir.mly" +# 1179 "parser_cocci_menhir.mly" ( let (mids,code) = t in if List.for_all (function [] -> true | _ -> false) code then [] @@ -11234,7 +11257,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct List.map (function x -> Ast0.wrap(Ast0.DOTS x)) code in [Ast0.wrap(Ast0.Disj(P.clt2mcode "(" _1, dot_code, mids, P.clt2mcode ")" _3))] ) -# 11238 "parser_cocci_menhir.ml" +# 11261 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11260,15 +11283,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11264 "parser_cocci_menhir.ml" +# 11287 "parser_cocci_menhir.ml" ) = Obj.magic pv in let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos_t_ in let _endpos = _endpos_pv_ in let _v : 'tv_decl_var = -# 935 "parser_cocci_menhir.mly" +# 942 "parser_cocci_menhir.mly" ( [Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv))] ) -# 11272 "parser_cocci_menhir.ml" +# 11295 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11299,7 +11322,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11303 "parser_cocci_menhir.ml" +# 11326 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_comma_list_d_ident_ = Obj.magic d in let t : 'tv_ctype = Obj.magic t in @@ -11309,16 +11332,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 11313 "parser_cocci_menhir.ml" +# 11336 "parser_cocci_menhir.ml" in -# 937 "parser_cocci_menhir.mly" +# 944 "parser_cocci_menhir.mly" ( List.map (function (id,fn) -> Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))) d ) -# 11322 "parser_cocci_menhir.ml" +# 11345 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11354,7 +11377,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11358 "parser_cocci_menhir.ml" +# 11381 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_comma_list_d_ident_ = Obj.magic d in let t : 'tv_ctype = Obj.magic t in @@ -11366,16 +11389,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 11370 "parser_cocci_menhir.ml" +# 11393 "parser_cocci_menhir.ml" in -# 937 "parser_cocci_menhir.mly" +# 944 "parser_cocci_menhir.mly" ( List.map (function (id,fn) -> Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))) d ) -# 11379 "parser_cocci_menhir.ml" +# 11402 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11397,9 +11420,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_f_ in let _endpos = _endpos_f_ in let _v : 'tv_decl_var = -# 941 "parser_cocci_menhir.mly" +# 948 "parser_cocci_menhir.mly" ( [f] ) -# 11403 "parser_cocci_menhir.ml" +# 11426 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11440,13 +11463,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11444 "parser_cocci_menhir.ml" +# 11467 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11450 "parser_cocci_menhir.ml" +# 11473 "parser_cocci_menhir.ml" ) = Obj.magic q in let d : 'tv_d_ident = Obj.magic d in let t : 'tv_ctype = Obj.magic t in @@ -11456,14 +11479,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 11460 "parser_cocci_menhir.ml" +# 11483 "parser_cocci_menhir.ml" in -# 943 "parser_cocci_menhir.mly" +# 950 "parser_cocci_menhir.mly" (let (id,fn) = d in [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) -# 11467 "parser_cocci_menhir.ml" +# 11490 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11509,13 +11532,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11513 "parser_cocci_menhir.ml" +# 11536 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11519 "parser_cocci_menhir.ml" +# 11542 "parser_cocci_menhir.ml" ) = Obj.magic q in let d : 'tv_d_ident = Obj.magic d in let t : 'tv_ctype = Obj.magic t in @@ -11527,14 +11550,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 11531 "parser_cocci_menhir.ml" +# 11554 "parser_cocci_menhir.ml" in -# 943 "parser_cocci_menhir.mly" +# 950 "parser_cocci_menhir.mly" (let (id,fn) = d in [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) -# 11538 "parser_cocci_menhir.ml" +# 11561 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11565,7 +11588,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11569 "parser_cocci_menhir.ml" +# 11592 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_comma_list_d_ident_ = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -11575,25 +11598,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 11579 "parser_cocci_menhir.ml" +# 11602 "parser_cocci_menhir.ml" in let s = # 39 "standard.mly" ( None ) -# 11586 "parser_cocci_menhir.ml" +# 11609 "parser_cocci_menhir.ml" in -# 948 "parser_cocci_menhir.mly" +# 955 "parser_cocci_menhir.mly" ( List.map (function (id,fn) -> let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv))) d ) -# 11597 "parser_cocci_menhir.ml" +# 11620 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11629,7 +11652,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11633 "parser_cocci_menhir.ml" +# 11656 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_comma_list_d_ident_ = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -11641,25 +11664,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 11645 "parser_cocci_menhir.ml" +# 11668 "parser_cocci_menhir.ml" in let s = # 39 "standard.mly" ( None ) -# 11652 "parser_cocci_menhir.ml" +# 11675 "parser_cocci_menhir.ml" in -# 948 "parser_cocci_menhir.mly" +# 955 "parser_cocci_menhir.mly" ( List.map (function (id,fn) -> let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv))) d ) -# 11663 "parser_cocci_menhir.ml" +# 11686 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11695,7 +11718,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11699 "parser_cocci_menhir.ml" +# 11722 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_comma_list_d_ident_ = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -11706,7 +11729,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 11710 "parser_cocci_menhir.ml" +# 11733 "parser_cocci_menhir.ml" in let s = @@ -11714,18 +11737,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 11718 "parser_cocci_menhir.ml" +# 11741 "parser_cocci_menhir.ml" in -# 948 "parser_cocci_menhir.mly" +# 955 "parser_cocci_menhir.mly" ( List.map (function (id,fn) -> let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv))) d ) -# 11729 "parser_cocci_menhir.ml" +# 11752 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11766,7 +11789,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11770 "parser_cocci_menhir.ml" +# 11793 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_comma_list_d_ident_ = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -11779,7 +11802,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 11783 "parser_cocci_menhir.ml" +# 11806 "parser_cocci_menhir.ml" in let s = @@ -11787,18 +11810,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 11791 "parser_cocci_menhir.ml" +# 11814 "parser_cocci_menhir.ml" in -# 948 "parser_cocci_menhir.mly" +# 955 "parser_cocci_menhir.mly" ( List.map (function (id,fn) -> let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv))) d ) -# 11802 "parser_cocci_menhir.ml" +# 11825 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11839,13 +11862,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11843 "parser_cocci_menhir.ml" +# 11866 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11849 "parser_cocci_menhir.ml" +# 11872 "parser_cocci_menhir.ml" ) = Obj.magic q in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -11855,24 +11878,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 11859 "parser_cocci_menhir.ml" +# 11882 "parser_cocci_menhir.ml" in let s = # 39 "standard.mly" ( None ) -# 11866 "parser_cocci_menhir.ml" +# 11889 "parser_cocci_menhir.ml" in -# 956 "parser_cocci_menhir.mly" +# 963 "parser_cocci_menhir.mly" ( let (id,fn) = d in !Data.add_type_name (P.id2name i); let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, P.clt2mcode ";" pv))] ) -# 11876 "parser_cocci_menhir.ml" +# 11899 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11918,13 +11941,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11922 "parser_cocci_menhir.ml" +# 11945 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 11928 "parser_cocci_menhir.ml" +# 11951 "parser_cocci_menhir.ml" ) = Obj.magic q in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -11936,24 +11959,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 11940 "parser_cocci_menhir.ml" +# 11963 "parser_cocci_menhir.ml" in let s = # 39 "standard.mly" ( None ) -# 11947 "parser_cocci_menhir.ml" +# 11970 "parser_cocci_menhir.ml" in -# 956 "parser_cocci_menhir.mly" +# 963 "parser_cocci_menhir.mly" ( let (id,fn) = d in !Data.add_type_name (P.id2name i); let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, P.clt2mcode ";" pv))] ) -# 11957 "parser_cocci_menhir.ml" +# 11980 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11999,13 +12022,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12003 "parser_cocci_menhir.ml" +# 12026 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12009 "parser_cocci_menhir.ml" +# 12032 "parser_cocci_menhir.ml" ) = Obj.magic q in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -12016,7 +12039,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 12020 "parser_cocci_menhir.ml" +# 12043 "parser_cocci_menhir.ml" in let s = @@ -12024,17 +12047,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 12028 "parser_cocci_menhir.ml" +# 12051 "parser_cocci_menhir.ml" in -# 956 "parser_cocci_menhir.mly" +# 963 "parser_cocci_menhir.mly" ( let (id,fn) = d in !Data.add_type_name (P.id2name i); let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, P.clt2mcode ";" pv))] ) -# 12038 "parser_cocci_menhir.ml" +# 12061 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12085,13 +12108,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12089 "parser_cocci_menhir.ml" +# 12112 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12095 "parser_cocci_menhir.ml" +# 12118 "parser_cocci_menhir.ml" ) = Obj.magic q in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -12104,7 +12127,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 12108 "parser_cocci_menhir.ml" +# 12131 "parser_cocci_menhir.ml" in let s = @@ -12112,17 +12135,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 12116 "parser_cocci_menhir.ml" +# 12139 "parser_cocci_menhir.ml" in -# 956 "parser_cocci_menhir.mly" +# 963 "parser_cocci_menhir.mly" ( let (id,fn) = d in !Data.add_type_name (P.id2name i); let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, P.clt2mcode ";" pv))] ) -# 12126 "parser_cocci_menhir.ml" +# 12149 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12183,34 +12206,34 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12187 "parser_cocci_menhir.ml" +# 12210 "parser_cocci_menhir.ml" ) = Obj.magic pv in let rp2 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 12192 "parser_cocci_menhir.ml" +# 12215 "parser_cocci_menhir.ml" ) = Obj.magic rp2 in let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in let lp2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 12198 "parser_cocci_menhir.ml" +# 12221 "parser_cocci_menhir.ml" ) = Obj.magic lp2 in let rp1 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 12203 "parser_cocci_menhir.ml" +# 12226 "parser_cocci_menhir.ml" ) = Obj.magic rp1 in let d : 'tv_d_ident = Obj.magic d in let st : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 12209 "parser_cocci_menhir.ml" +# 12232 "parser_cocci_menhir.ml" ) = Obj.magic st in let lp1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 12214 "parser_cocci_menhir.ml" +# 12237 "parser_cocci_menhir.ml" ) = Obj.magic lp1 in let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos_t_ in @@ -12219,11 +12242,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 12223 "parser_cocci_menhir.ml" +# 12246 "parser_cocci_menhir.ml" in -# 966 "parser_cocci_menhir.mly" +# 973 "parser_cocci_menhir.mly" ( let (id,fn) = d in let t = Ast0.wrap @@ -12231,7 +12254,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in [Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))] ) -# 12235 "parser_cocci_menhir.ml" +# 12258 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12297,34 +12320,34 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12301 "parser_cocci_menhir.ml" +# 12324 "parser_cocci_menhir.ml" ) = Obj.magic pv in let rp2 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 12306 "parser_cocci_menhir.ml" +# 12329 "parser_cocci_menhir.ml" ) = Obj.magic rp2 in let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in let lp2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 12312 "parser_cocci_menhir.ml" +# 12335 "parser_cocci_menhir.ml" ) = Obj.magic lp2 in let rp1 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 12317 "parser_cocci_menhir.ml" +# 12340 "parser_cocci_menhir.ml" ) = Obj.magic rp1 in let d : 'tv_d_ident = Obj.magic d in let st : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 12323 "parser_cocci_menhir.ml" +# 12346 "parser_cocci_menhir.ml" ) = Obj.magic st in let lp1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 12328 "parser_cocci_menhir.ml" +# 12351 "parser_cocci_menhir.ml" ) = Obj.magic lp1 in let t : 'tv_ctype = Obj.magic t in let x0 : 'tv_storage = Obj.magic x0 in @@ -12335,11 +12358,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 12339 "parser_cocci_menhir.ml" +# 12362 "parser_cocci_menhir.ml" in -# 966 "parser_cocci_menhir.mly" +# 973 "parser_cocci_menhir.mly" ( let (id,fn) = d in let t = Ast0.wrap @@ -12347,7 +12370,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in [Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))] ) -# 12351 "parser_cocci_menhir.ml" +# 12374 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12388,27 +12411,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _5 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12392 "parser_cocci_menhir.ml" +# 12415 "parser_cocci_menhir.ml" ) = Obj.magic _5 in let _4 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 12397 "parser_cocci_menhir.ml" +# 12420 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr_list_option = Obj.magic _3 in let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 12403 "parser_cocci_menhir.ml" +# 12426 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_decl_ident = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : 'tv_decl_var = -# 974 "parser_cocci_menhir.mly" +# 981 "parser_cocci_menhir.mly" ( [Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3, P.clt2mcode ")" _4,P.clt2mcode ";" _5))] ) -# 12412 "parser_cocci_menhir.ml" +# 12435 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12479,40 +12502,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12483 "parser_cocci_menhir.ml" +# 12506 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12489 "parser_cocci_menhir.ml" +# 12512 "parser_cocci_menhir.ml" ) = Obj.magic q in let rp2 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 12494 "parser_cocci_menhir.ml" +# 12517 "parser_cocci_menhir.ml" ) = Obj.magic rp2 in let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in let lp2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 12500 "parser_cocci_menhir.ml" +# 12523 "parser_cocci_menhir.ml" ) = Obj.magic lp2 in let rp1 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 12505 "parser_cocci_menhir.ml" +# 12528 "parser_cocci_menhir.ml" ) = Obj.magic rp1 in let d : 'tv_d_ident = Obj.magic d in let st : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 12511 "parser_cocci_menhir.ml" +# 12534 "parser_cocci_menhir.ml" ) = Obj.magic st in let lp1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 12516 "parser_cocci_menhir.ml" +# 12539 "parser_cocci_menhir.ml" ) = Obj.magic lp1 in let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos_t_ in @@ -12521,11 +12544,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 12525 "parser_cocci_menhir.ml" +# 12548 "parser_cocci_menhir.ml" in -# 980 "parser_cocci_menhir.mly" +# 987 "parser_cocci_menhir.mly" ( let (id,fn) = d in let t = Ast0.wrap @@ -12533,7 +12556,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) -# 12537 "parser_cocci_menhir.ml" +# 12560 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12609,40 +12632,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12613 "parser_cocci_menhir.ml" +# 12636 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12619 "parser_cocci_menhir.ml" +# 12642 "parser_cocci_menhir.ml" ) = Obj.magic q in let rp2 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 12624 "parser_cocci_menhir.ml" +# 12647 "parser_cocci_menhir.ml" ) = Obj.magic rp2 in let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in let lp2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 12630 "parser_cocci_menhir.ml" +# 12653 "parser_cocci_menhir.ml" ) = Obj.magic lp2 in let rp1 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 12635 "parser_cocci_menhir.ml" +# 12658 "parser_cocci_menhir.ml" ) = Obj.magic rp1 in let d : 'tv_d_ident = Obj.magic d in let st : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 12641 "parser_cocci_menhir.ml" +# 12664 "parser_cocci_menhir.ml" ) = Obj.magic st in let lp1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 12646 "parser_cocci_menhir.ml" +# 12669 "parser_cocci_menhir.ml" ) = Obj.magic lp1 in let t : 'tv_ctype = Obj.magic t in let x0 : 'tv_storage = Obj.magic x0 in @@ -12653,11 +12676,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 12657 "parser_cocci_menhir.ml" +# 12680 "parser_cocci_menhir.ml" in -# 980 "parser_cocci_menhir.mly" +# 987 "parser_cocci_menhir.mly" ( let (id,fn) = d in let t = Ast0.wrap @@ -12665,7 +12688,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) -# 12669 "parser_cocci_menhir.ml" +# 12692 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12701,25 +12724,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12705 "parser_cocci_menhir.ml" +# 12728 "parser_cocci_menhir.ml" ) = Obj.magic pv in let id : 'tv_comma_list_typedef_ident_ = Obj.magic id in let t : 'tv_typedef_ctype = Obj.magic t in let s : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 12712 "parser_cocci_menhir.ml" +# 12735 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_pv_ in let _v : 'tv_decl_var = -# 988 "parser_cocci_menhir.mly" +# 995 "parser_cocci_menhir.mly" ( let s = P.clt2mcode "typedef" s in List.map (function id -> Ast0.wrap(Ast0.Typedef(s,t,id,P.clt2mcode ";" pv))) id ) -# 12723 "parser_cocci_menhir.ml" +# 12746 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12741,13 +12764,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_define_param_list = -# 705 "parser_cocci_menhir.mly" +# 712 "parser_cocci_menhir.mly" (let circle x = match Ast0.unwrap x with Ast0.DPcircles(_) -> true | _ -> false in if List.exists circle _1 then Ast0.wrap(Ast0.CIRCLES(_1)) else Ast0.wrap(Ast0.DOTS(_1)) ) -# 12751 "parser_cocci_menhir.ml" +# 12774 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12769,9 +12792,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_define_param_list_option = -# 729 "parser_cocci_menhir.mly" +# 736 "parser_cocci_menhir.mly" ( _1 ) -# 12775 "parser_cocci_menhir.ml" +# 12798 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12786,9 +12809,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_define_param_list_option = -# 730 "parser_cocci_menhir.mly" +# 737 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS([])) ) -# 12792 "parser_cocci_menhir.ml" +# 12815 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12810,9 +12833,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_define_param_list_start = -# 712 "parser_cocci_menhir.mly" +# 719 "parser_cocci_menhir.mly" ( [Ast0.wrap(Ast0.DParam _1)] ) -# 12816 "parser_cocci_menhir.ml" +# 12839 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12844,16 +12867,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 12848 "parser_cocci_menhir.ml" +# 12871 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_ident = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_define_param_list_start = -# 714 "parser_cocci_menhir.mly" +# 721 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DParam _1):: Ast0.wrap(Ast0.DPComma(P.clt2mcode "," _2))::_3 ) -# 12857 "parser_cocci_menhir.ml" +# 12880 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12880,15 +12903,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let d : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 12884 "parser_cocci_menhir.ml" +# 12907 "parser_cocci_menhir.ml" ) = Obj.magic d in let _startpos = _startpos_d_ in let _endpos = _endpos_r_ in let _v : 'tv_define_param_list_start = -# 717 "parser_cocci_menhir.mly" +# 724 "parser_cocci_menhir.mly" ( (P.mkdpdots "..." d):: (List.concat (List.map (function x -> x (P.mkdpdots "...")) r)) ) -# 12892 "parser_cocci_menhir.ml" +# 12915 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12909,12 +12932,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 81 "parser_cocci_menhir.mly" (Data.clt * token) -# 12913 "parser_cocci_menhir.ml" +# 12936 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_defineop = -# 664 "parser_cocci_menhir.mly" +# 671 "parser_cocci_menhir.mly" ( let (clt,ident) = _1 in function body -> Ast0.wrap @@ -12931,7 +12954,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct "unexpected name for a #define")), Ast0.wrap Ast0.NoParams, body)) ) -# 12935 "parser_cocci_menhir.ml" +# 12958 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12962,18 +12985,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 12966 "parser_cocci_menhir.ml" +# 12989 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_define_param_list_option = Obj.magic _2 in let _1 : ( # 82 "parser_cocci_menhir.mly" (Data.clt * token * int * int) -# 12972 "parser_cocci_menhir.ml" +# 12995 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_defineop = -# 681 "parser_cocci_menhir.mly" +# 688 "parser_cocci_menhir.mly" ( let (clt,ident,parenoff,parencol) = _1 in (* clt is the start of the #define itself *) let (arity,line,lline,offset,col,strbef,straft,pos) = clt in @@ -12994,7 +13017,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (Semantic_cocci.Semantic "unexpected name for a #define")), Ast0.wrap (Ast0.DParams (lp,_2,P.clt2mcode ")" _3)),body)) ) -# 12998 "parser_cocci_menhir.ml" +# 13021 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13018,7 +13041,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_dep = # 225 "parser_cocci_menhir.mly" ( _1 ) -# 13022 "parser_cocci_menhir.ml" +# 13045 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13052,7 +13075,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_dep = # 226 "parser_cocci_menhir.mly" ( Ast.AndDep(_1, _3) ) -# 13056 "parser_cocci_menhir.ml" +# 13079 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13086,7 +13109,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_dep = # 227 "parser_cocci_menhir.mly" ( Ast.OrDep (_1, _3) ) -# 13090 "parser_cocci_menhir.ml" +# 13113 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13103,7 +13126,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_depends = # 221 "parser_cocci_menhir.mly" ( Ast.NoDep ) -# 13107 "parser_cocci_menhir.ml" +# 13130 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13135,7 +13158,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_depends = # 222 "parser_cocci_menhir.mly" ( parents ) -# 13139 "parser_cocci_menhir.ml" +# 13162 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13162,14 +13185,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 13166 "parser_cocci_menhir.ml" +# 13189 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_designator = -# 1089 "parser_cocci_menhir.mly" +# 1096 "parser_cocci_menhir.mly" ( Ast0.DesignatorField (P.clt2mcode "." _1,_2) ) -# 13173 "parser_cocci_menhir.ml" +# 13196 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13200,20 +13223,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 13204 "parser_cocci_menhir.ml" +# 13227 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 13210 "parser_cocci_menhir.ml" +# 13233 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_designator = -# 1091 "parser_cocci_menhir.mly" +# 1098 "parser_cocci_menhir.mly" ( Ast0.DesignatorIndex (P.clt2mcode "[" _1,_2,P.clt2mcode "]" _3) ) -# 13217 "parser_cocci_menhir.ml" +# 13240 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13254,27 +13277,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _5 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 13258 "parser_cocci_menhir.ml" +# 13281 "parser_cocci_menhir.ml" ) = Obj.magic _5 in let _4 : 'tv_eexpr = Obj.magic _4 in let _3 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 13264 "parser_cocci_menhir.ml" +# 13287 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 13270 "parser_cocci_menhir.ml" +# 13293 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : 'tv_designator = -# 1093 "parser_cocci_menhir.mly" +# 1100 "parser_cocci_menhir.mly" ( Ast0.DesignatorRange (P.clt2mcode "[" _1,_2,P.clt2mcode "..." _3, _4,P.clt2mcode "]" _5) ) -# 13278 "parser_cocci_menhir.ml" +# 13301 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13296,9 +13319,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_dexpr = -# 1192 "parser_cocci_menhir.mly" +# 1199 "parser_cocci_menhir.mly" ( _1 ) -# 13302 "parser_cocci_menhir.ml" +# 13325 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13326,7 +13349,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_disable = # 240 "parser_cocci_menhir.mly" ( List.map P.id2name _2 ) -# 13330 "parser_cocci_menhir.ml" +# 13353 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13347,14 +13370,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 13351 "parser_cocci_menhir.ml" +# 13374 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_dot_expressions = -# 1201 "parser_cocci_menhir.mly" +# 1208 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Edots(P.clt2mcode "..." _1,None)) ) -# 13358 "parser_cocci_menhir.ml" +# 13381 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13376,9 +13399,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_dot_expressions = -# 1202 "parser_cocci_menhir.mly" +# 1209 "parser_cocci_menhir.mly" ( _1 ) -# 13382 "parser_cocci_menhir.ml" +# 13405 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13404,20 +13427,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let d : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 13408 "parser_cocci_menhir.ml" +# 13431 "parser_cocci_menhir.ml" ) = Obj.magic d in let c : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 13413 "parser_cocci_menhir.ml" +# 13436 "parser_cocci_menhir.ml" ) = Obj.magic c in let _startpos = _startpos_c_ in let _endpos = _endpos_d_ in let _v : 'tv_dp_comma_args_TEllipsis_ = -# 722 "parser_cocci_menhir.mly" +# 729 "parser_cocci_menhir.mly" ( function dot_builder -> [Ast0.wrap(Ast0.DPComma(P.clt2mcode "," c)); dot_builder d] ) -# 13421 "parser_cocci_menhir.ml" +# 13444 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13444,16 +13467,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 13448 "parser_cocci_menhir.ml" +# 13471 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_dp_comma_args_TEllipsis_ = -# 725 "parser_cocci_menhir.mly" +# 732 "parser_cocci_menhir.mly" ( function dot_builder -> [Ast0.wrap(Ast0.DPComma(P.clt2mcode "," _1)); Ast0.wrap(Ast0.DParam _2)] ) -# 13457 "parser_cocci_menhir.ml" +# 13480 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13474,14 +13497,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let d : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 13478 "parser_cocci_menhir.ml" +# 13501 "parser_cocci_menhir.ml" ) = Obj.magic d in let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : 'tv_edots_when_TEllipsis_eexpr_ = -# 1830 "parser_cocci_menhir.mly" +# 1883 "parser_cocci_menhir.mly" ( (d,None) ) -# 13485 "parser_cocci_menhir.ml" +# 13508 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13520,14 +13543,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let d : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 13524 "parser_cocci_menhir.ml" +# 13547 "parser_cocci_menhir.ml" ) = Obj.magic d in let _startpos = _startpos_d_ in let _endpos = _endpos__5_ in let _v : 'tv_edots_when_TEllipsis_eexpr_ = -# 1831 "parser_cocci_menhir.mly" +# 1884 "parser_cocci_menhir.mly" ( (d,Some w) ) -# 13531 "parser_cocci_menhir.ml" +# 13554 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13548,14 +13571,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let d : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 13552 "parser_cocci_menhir.ml" +# 13575 "parser_cocci_menhir.ml" ) = Obj.magic d in let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : 'tv_edots_when_TEllipsis_initialize_ = -# 1830 "parser_cocci_menhir.mly" +# 1883 "parser_cocci_menhir.mly" ( (d,None) ) -# 13559 "parser_cocci_menhir.ml" +# 13582 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13594,14 +13617,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let d : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 13598 "parser_cocci_menhir.ml" +# 13621 "parser_cocci_menhir.ml" ) = Obj.magic d in let _startpos = _startpos_d_ in let _endpos = _endpos__5_ in let _v : 'tv_edots_when_TEllipsis_initialize_ = -# 1831 "parser_cocci_menhir.mly" +# 1884 "parser_cocci_menhir.mly" ( (d,Some w) ) -# 13605 "parser_cocci_menhir.ml" +# 13628 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13622,14 +13645,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let d : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 13626 "parser_cocci_menhir.ml" +# 13649 "parser_cocci_menhir.ml" ) = Obj.magic d in let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : 'tv_edots_when_TEllipsis_struct_decl_ = -# 1830 "parser_cocci_menhir.mly" +# 1883 "parser_cocci_menhir.mly" ( (d,None) ) -# 13633 "parser_cocci_menhir.ml" +# 13656 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13668,14 +13691,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let d : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 13672 "parser_cocci_menhir.ml" +# 13695 "parser_cocci_menhir.ml" ) = Obj.magic d in let _startpos = _startpos_d_ in let _endpos = _endpos__5_ in let _v : 'tv_edots_when_TEllipsis_struct_decl_ = -# 1831 "parser_cocci_menhir.mly" +# 1884 "parser_cocci_menhir.mly" ( (d,Some w) ) -# 13679 "parser_cocci_menhir.ml" +# 13702 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13697,9 +13720,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_eexpr = -# 1190 "parser_cocci_menhir.mly" +# 1197 "parser_cocci_menhir.mly" ( _1 ) -# 13703 "parser_cocci_menhir.ml" +# 13726 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13721,7 +13744,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_eexpr_list = -# 1774 "parser_cocci_menhir.mly" +# 1827 "parser_cocci_menhir.mly" (let circle x = match Ast0.unwrap x with Ast0.Ecircles(_) -> true | _ -> false in let star x = @@ -13732,7 +13755,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct if List.exists star _1 then Ast0.wrap(Ast0.STARS(_1)) else Ast0.wrap(Ast0.DOTS(_1)) ) -# 13736 "parser_cocci_menhir.ml" +# 13759 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13754,9 +13777,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_eexpr_list_option = -# 1813 "parser_cocci_menhir.mly" +# 1866 "parser_cocci_menhir.mly" ( _1 ) -# 13760 "parser_cocci_menhir.ml" +# 13783 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13771,9 +13794,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_eexpr_list_option = -# 1814 "parser_cocci_menhir.mly" +# 1867 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS([])) ) -# 13777 "parser_cocci_menhir.ml" +# 13800 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13795,9 +13818,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_eexpr_list_start = -# 1801 "parser_cocci_menhir.mly" +# 1854 "parser_cocci_menhir.mly" ( [_1] ) -# 13801 "parser_cocci_menhir.ml" +# 13824 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13829,15 +13852,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 13833 "parser_cocci_menhir.ml" +# 13856 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_aexpr = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_eexpr_list_start = -# 1803 "parser_cocci_menhir.mly" +# 1856 "parser_cocci_menhir.mly" ( _1::Ast0.wrap(Ast0.EComma(P.clt2mcode "," _2))::_3 ) -# 13841 "parser_cocci_menhir.ml" +# 13864 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13859,7 +13882,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_exists = # 243 "parser_cocci_menhir.mly" ( Ast.Exists ) -# 13863 "parser_cocci_menhir.ml" +# 13886 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13881,7 +13904,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_exists = # 244 "parser_cocci_menhir.mly" ( Ast.Forall ) -# 13885 "parser_cocci_menhir.ml" +# 13908 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13898,7 +13921,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_exists = # 245 "parser_cocci_menhir.mly" ( Ast.Undetermined ) -# 13902 "parser_cocci_menhir.ml" +# 13925 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13920,9 +13943,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_expr = -# 1188 "parser_cocci_menhir.mly" +# 1195 "parser_cocci_menhir.mly" ( _1 ) -# 13926 "parser_cocci_menhir.ml" +# 13949 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13944,9 +13967,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_r_ in let _endpos = _endpos_r_ in let _v : 'tv_expr_dots_TEllipsis_ = -# 1370 "parser_cocci_menhir.mly" +# 1377 "parser_cocci_menhir.mly" ( r ) -# 13950 "parser_cocci_menhir.ml" +# 13973 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13963,7 +13986,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_extends = # 216 "parser_cocci_menhir.mly" ( () ) -# 13967 "parser_cocci_menhir.ml" +# 13990 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13988,14 +14011,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let parent : ( # 47 "parser_cocci_menhir.mly" (string) -# 13992 "parser_cocci_menhir.ml" +# 14015 "parser_cocci_menhir.ml" ) = Obj.magic parent in let _startpos = _startpos__1_ in let _endpos = _endpos_parent_ in let _v : 'tv_extends = # 218 "parser_cocci_menhir.mly" ( !Data.install_bindings (parent) ) -# 13999 "parser_cocci_menhir.ml" +# 14022 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14021,21 +14044,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 83 "parser_cocci_menhir.mly" (string * Data.clt) -# 14025 "parser_cocci_menhir.ml" +# 14048 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 83 "parser_cocci_menhir.mly" (string * Data.clt) -# 14030 "parser_cocci_menhir.ml" +# 14053 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_filespec = -# 623 "parser_cocci_menhir.mly" +# 630 "parser_cocci_menhir.mly" ( [Ast0.wrap (Ast0.FILEINFO(P.id2mcode _1, P.id2mcode _2))] ) -# 14039 "parser_cocci_menhir.ml" +# 14062 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14050,9 +14073,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_fninfo = -# 758 "parser_cocci_menhir.mly" +# 765 "parser_cocci_menhir.mly" ( [] ) -# 14056 "parser_cocci_menhir.ml" +# 14079 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14080,13 +14103,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fninfo = -# 760 "parser_cocci_menhir.mly" +# 767 "parser_cocci_menhir.mly" ( try let _ = List.find (function Ast0.FStorage(_) -> true | _ -> false) _2 in raise (Semantic_cocci.Semantic "duplicate storage") with Not_found -> (Ast0.FStorage(_1))::_2 ) -# 14090 "parser_cocci_menhir.ml" +# 14113 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14114,9 +14137,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_t_ in let _endpos = _endpos_r_ in let _v : 'tv_fninfo = -# 765 "parser_cocci_menhir.mly" +# 772 "parser_cocci_menhir.mly" ( (Ast0.FType(t))::r ) -# 14120 "parser_cocci_menhir.ml" +# 14143 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14143,17 +14166,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 14147 "parser_cocci_menhir.ml" +# 14170 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fninfo = -# 767 "parser_cocci_menhir.mly" +# 774 "parser_cocci_menhir.mly" ( try let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) _2 in raise (Semantic_cocci.Semantic "duplicate inline") with Not_found -> (Ast0.FInline(P.clt2mcode "inline" _1))::_2 ) -# 14157 "parser_cocci_menhir.ml" +# 14180 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14180,17 +14203,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 55 "parser_cocci_menhir.mly" (string * Data.clt) -# 14184 "parser_cocci_menhir.ml" +# 14207 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fninfo = -# 772 "parser_cocci_menhir.mly" +# 779 "parser_cocci_menhir.mly" ( try let _ = List.find (function Ast0.FAttr(_) -> true | _ -> false) _2 in raise (Semantic_cocci.Semantic "multiple attributes") with Not_found -> (Ast0.FAttr(P.id2mcode _1))::_2 ) -# 14194 "parser_cocci_menhir.ml" +# 14217 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14205,9 +14228,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_fninfo_nt = -# 778 "parser_cocci_menhir.mly" +# 785 "parser_cocci_menhir.mly" ( [] ) -# 14211 "parser_cocci_menhir.ml" +# 14234 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14235,13 +14258,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fninfo_nt = -# 780 "parser_cocci_menhir.mly" +# 787 "parser_cocci_menhir.mly" ( try let _ = List.find (function Ast0.FStorage(_) -> true | _ -> false) _2 in raise (Semantic_cocci.Semantic "duplicate storage") with Not_found -> (Ast0.FStorage(_1))::_2 ) -# 14245 "parser_cocci_menhir.ml" +# 14268 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14268,17 +14291,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 14272 "parser_cocci_menhir.ml" +# 14295 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fninfo_nt = -# 786 "parser_cocci_menhir.mly" +# 793 "parser_cocci_menhir.mly" ( try let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) _2 in raise (Semantic_cocci.Semantic "duplicate inline") with Not_found -> (Ast0.FInline(P.clt2mcode "inline" _1))::_2 ) -# 14282 "parser_cocci_menhir.ml" +# 14305 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14305,17 +14328,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 55 "parser_cocci_menhir.mly" (string * Data.clt) -# 14309 "parser_cocci_menhir.ml" +# 14332 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fninfo_nt = -# 791 "parser_cocci_menhir.mly" +# 798 "parser_cocci_menhir.mly" ( try let _ = List.find (function Ast0.FAttr(_) -> true | _ -> false) _2 in raise (Semantic_cocci.Semantic "duplicate init") with Not_found -> (Ast0.FAttr(P.id2mcode _1))::_2 ) -# 14319 "parser_cocci_menhir.ml" +# 14342 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14330,9 +14353,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_fun_after_dots = -# 1722 "parser_cocci_menhir.mly" +# 1775 "parser_cocci_menhir.mly" ([]) -# 14336 "parser_cocci_menhir.ml" +# 14359 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14358,9 +14381,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fun_after_dots = -# 1723 "parser_cocci_menhir.mly" +# 1776 "parser_cocci_menhir.mly" (_2) -# 14364 "parser_cocci_menhir.ml" +# 14387 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14388,9 +14411,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fun_after_dots = -# 1724 "parser_cocci_menhir.mly" +# 1777 "parser_cocci_menhir.mly" (Ast0.wrap(Ast0.Exp(_1))::_2) -# 14394 "parser_cocci_menhir.ml" +# 14417 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14418,9 +14441,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fun_after_dots = -# 1725 "parser_cocci_menhir.mly" +# 1778 "parser_cocci_menhir.mly" (_1@_2) -# 14424 "parser_cocci_menhir.ml" +# 14447 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14435,9 +14458,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_fun_after_dots_or = -# 1732 "parser_cocci_menhir.mly" +# 1785 "parser_cocci_menhir.mly" ([]) -# 14441 "parser_cocci_menhir.ml" +# 14464 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14463,9 +14486,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fun_after_dots_or = -# 1733 "parser_cocci_menhir.mly" +# 1786 "parser_cocci_menhir.mly" (_2) -# 14469 "parser_cocci_menhir.ml" +# 14492 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14493,9 +14516,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fun_after_dots_or = -# 1734 "parser_cocci_menhir.mly" +# 1787 "parser_cocci_menhir.mly" (Ast0.wrap(Ast0.Exp(_1))::_2) -# 14499 "parser_cocci_menhir.ml" +# 14522 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14523,9 +14546,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fun_after_dots_or = -# 1735 "parser_cocci_menhir.mly" +# 1788 "parser_cocci_menhir.mly" (_1@_2) -# 14529 "parser_cocci_menhir.ml" +# 14552 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14553,9 +14576,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fun_after_exp = -# 1728 "parser_cocci_menhir.mly" +# 1781 "parser_cocci_menhir.mly" (_1::_2) -# 14559 "parser_cocci_menhir.ml" +# 14582 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14570,9 +14593,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_fun_after_exp_or = -# 1738 "parser_cocci_menhir.mly" +# 1791 "parser_cocci_menhir.mly" ([]) -# 14576 "parser_cocci_menhir.ml" +# 14599 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14600,9 +14623,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fun_after_exp_or = -# 1739 "parser_cocci_menhir.mly" +# 1792 "parser_cocci_menhir.mly" (_1::_2) -# 14606 "parser_cocci_menhir.ml" +# 14629 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14617,9 +14640,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_fun_after_stm = -# 1717 "parser_cocci_menhir.mly" +# 1770 "parser_cocci_menhir.mly" ([]) -# 14623 "parser_cocci_menhir.ml" +# 14646 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14647,9 +14670,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fun_after_stm = -# 1718 "parser_cocci_menhir.mly" +# 1771 "parser_cocci_menhir.mly" (_1::_2) -# 14653 "parser_cocci_menhir.ml" +# 14676 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14677,9 +14700,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_fun_after_stm = -# 1719 "parser_cocci_menhir.mly" +# 1772 "parser_cocci_menhir.mly" (_1@_2) -# 14683 "parser_cocci_menhir.ml" +# 14706 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14701,9 +14724,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_fun_start = -# 1714 "parser_cocci_menhir.mly" +# 1767 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS(_1)) ) -# 14707 "parser_cocci_menhir.ml" +# 14730 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14725,9 +14748,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_func_ident = -# 1512 "parser_cocci_menhir.mly" +# 1565 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 14731 "parser_cocci_menhir.ml" +# 14754 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14748,15 +14771,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 61 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 14752 "parser_cocci_menhir.ml" +# 14775 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_func_ident = -# 1514 "parser_cocci_menhir.mly" +# 1567 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,clt) = _1 in Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) ) -# 14760 "parser_cocci_menhir.ml" +# 14783 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14777,15 +14800,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 61 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 14781 "parser_cocci_menhir.ml" +# 14804 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_func_ident = -# 1517 "parser_cocci_menhir.mly" +# 1570 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,clt) = _1 in Ast0.wrap(Ast0.MetaFunc(P.clt2mcode nm clt,constraints,pure)) ) -# 14789 "parser_cocci_menhir.ml" +# 14812 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14806,16 +14829,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 61 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 14810 "parser_cocci_menhir.ml" +# 14833 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_func_ident = -# 1520 "parser_cocci_menhir.mly" +# 1573 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,clt) = _1 in Ast0.wrap (Ast0.MetaLocalFunc(P.clt2mcode nm clt,constraints,pure)) ) -# 14819 "parser_cocci_menhir.ml" +# 14842 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14875,31 +14898,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rb : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 14879 "parser_cocci_menhir.ml" +# 14902 "parser_cocci_menhir.ml" ) = Obj.magic rb in let b : 'tv_fun_start = Obj.magic b in let lb : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 14885 "parser_cocci_menhir.ml" +# 14908 "parser_cocci_menhir.ml" ) = Obj.magic lb in let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 14890 "parser_cocci_menhir.ml" +# 14913 "parser_cocci_menhir.ml" ) = Obj.magic rp in let d : 'tv_decl_list_decl_ = Obj.magic d in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 14896 "parser_cocci_menhir.ml" +# 14919 "parser_cocci_menhir.ml" ) = Obj.magic lp in let i : 'tv_func_ident = Obj.magic i in let f : 'tv_fninfo = Obj.magic f in let _startpos = _startpos_f_ in let _endpos = _endpos_rb_ in let _v : 'tv_fundecl = -# 749 "parser_cocci_menhir.mly" +# 756 "parser_cocci_menhir.mly" ( P.verify_parameter_declarations (Ast0.undots d); Ast0.wrap(Ast0.FunDecl((Ast0.default_info(),Ast0.context_befaft()), f, i, @@ -14907,7 +14930,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct P.clt2mcode ")" rp, P.clt2mcode "{" lb, b, P.clt2mcode "}" rb)) ) -# 14911 "parser_cocci_menhir.ml" +# 14934 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14953,18 +14976,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pt : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 14957 "parser_cocci_menhir.ml" +# 14980 "parser_cocci_menhir.ml" ) = Obj.magic pt in let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 14962 "parser_cocci_menhir.ml" +# 14985 "parser_cocci_menhir.ml" ) = Obj.magic rp in let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 14968 "parser_cocci_menhir.ml" +# 14991 "parser_cocci_menhir.ml" ) = Obj.magic lp in let id : 'tv_func_ident = Obj.magic id in let t : 'tv_ctype = Obj.magic t in @@ -14974,11 +14997,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 14978 "parser_cocci_menhir.ml" +# 15001 "parser_cocci_menhir.ml" in -# 737 "parser_cocci_menhir.mly" +# 744 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.UnInit (s, @@ -14986,7 +15009,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (Ast0.FunctionType(Some t, P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)), id, P.clt2mcode ";" pt)) ) -# 14990 "parser_cocci_menhir.ml" +# 15013 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15037,18 +15060,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pt : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 15041 "parser_cocci_menhir.ml" +# 15064 "parser_cocci_menhir.ml" ) = Obj.magic pt in let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 15046 "parser_cocci_menhir.ml" +# 15069 "parser_cocci_menhir.ml" ) = Obj.magic rp in let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 15052 "parser_cocci_menhir.ml" +# 15075 "parser_cocci_menhir.ml" ) = Obj.magic lp in let id : 'tv_func_ident = Obj.magic id in let t : 'tv_ctype = Obj.magic t in @@ -15060,11 +15083,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 15064 "parser_cocci_menhir.ml" +# 15087 "parser_cocci_menhir.ml" in -# 737 "parser_cocci_menhir.mly" +# 744 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.UnInit (s, @@ -15072,7 +15095,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (Ast0.FunctionType(Some t, P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)), id, P.clt2mcode ";" pt)) ) -# 15076 "parser_cocci_menhir.ml" +# 15099 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15094,9 +15117,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_ident = -# 1525 "parser_cocci_menhir.mly" +# 1578 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 15100 "parser_cocci_menhir.ml" +# 15123 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15117,15 +15140,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 61 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 15121 "parser_cocci_menhir.ml" +# 15144 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_ident = -# 1527 "parser_cocci_menhir.mly" +# 1580 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,clt) = _1 in Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) ) -# 15129 "parser_cocci_menhir.ml" +# 15152 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15147,9 +15170,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_i_ in let _endpos = _endpos_i_ in let _v : 'tv_ident_or_const = -# 1479 "parser_cocci_menhir.mly" +# 1532 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i)))) ) -# 15153 "parser_cocci_menhir.ml" +# 15176 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15170,15 +15193,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 15174 "parser_cocci_menhir.ml" +# 15197 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_ident_or_const = -# 1481 "parser_cocci_menhir.mly" +# 1534 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 15182 "parser_cocci_menhir.ml" +# 15205 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15199,14 +15222,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 80 "parser_cocci_menhir.mly" (string * Data.clt) -# 15203 "parser_cocci_menhir.ml" +# 15226 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_incl = # 256 "parser_cocci_menhir.mly" ( let (x,_) = _1 in Data.Include(x) ) -# 15210 "parser_cocci_menhir.ml" +# 15233 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15231,14 +15254,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 15235 "parser_cocci_menhir.ml" +# 15258 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_incl = # 257 "parser_cocci_menhir.mly" ( Data.Iso(Common.Left(P.id2name _2)) ) -# 15242 "parser_cocci_menhir.ml" +# 15265 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15263,14 +15286,47 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 79 "parser_cocci_menhir.mly" (string) -# 15267 "parser_cocci_menhir.ml" +# 15290 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_incl = # 258 "parser_cocci_menhir.mly" ( Data.Iso(Common.Right _2) ) -# 15274 "parser_cocci_menhir.ml" +# 15297 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_comma_list_pure_ident_ = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_incl = +# 260 "parser_cocci_menhir.mly" + ( let names = List.map P.id2name _2 in + (* ensure that the names of virtual and real rules don't overlap *) + List.iter + (function name -> Hashtbl.add Data.all_metadecls name []) + names; + Data.Virt(names) ) +# 15330 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15298,11 +15354,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 146 "parser_cocci_menhir.mly" (Data.incl_iso list) -# 15302 "parser_cocci_menhir.ml" +# 15358 "parser_cocci_menhir.ml" ) = # 252 "parser_cocci_menhir.mly" ( _1 ) -# 15306 "parser_cocci_menhir.ml" +# 15362 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15330,11 +15386,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 146 "parser_cocci_menhir.mly" (Data.incl_iso list) -# 15334 "parser_cocci_menhir.ml" +# 15390 "parser_cocci_menhir.ml" ) = # 253 "parser_cocci_menhir.mly" ( _1 ) -# 15338 "parser_cocci_menhir.ml" +# 15394 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15355,12 +15411,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 80 "parser_cocci_menhir.mly" (string * Data.clt) -# 15359 "parser_cocci_menhir.ml" +# 15415 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_includes = -# 629 "parser_cocci_menhir.mly" +# 636 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Include(P.clt2mcode "#include" (P.drop_aft (P.id2clt _1)), let (arity,ln,lln,offset,col,strbef,straft,pos) = @@ -15370,7 +15426,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct P.clt2mcode (Ast.Local (Parse_aux.str2inc (P.id2name _1))) (P.drop_bef clt))) ) -# 15374 "parser_cocci_menhir.ml" +# 15430 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15391,12 +15447,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 80 "parser_cocci_menhir.mly" (string * Data.clt) -# 15395 "parser_cocci_menhir.ml" +# 15451 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_includes = -# 639 "parser_cocci_menhir.mly" +# 646 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Include(P.clt2mcode "#include" (P.drop_aft (P.id2clt _1)), let (arity,ln,lln,offset,col,strbef,straft,pos) = @@ -15406,7 +15462,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct P.clt2mcode (Ast.NonLocal (Parse_aux.str2inc (P.id2name _1))) (P.drop_bef clt))) ) -# 15410 "parser_cocci_menhir.ml" +# 15466 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15438,10 +15494,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_d_ in let _endpos = _endpos__3_ in let _v : 'tv_includes = -# 649 "parser_cocci_menhir.mly" +# 656 "parser_cocci_menhir.mly" ( let ty = Ast0.wrap(Ast0.TopExp(Ast0.wrap(Ast0.TypeExp(t)))) in d (Ast0.wrap(Ast0.DOTS([ty]))) ) -# 15445 "parser_cocci_menhir.ml" +# 15501 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15473,7 +15529,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_includes = -# 652 "parser_cocci_menhir.mly" +# 659 "parser_cocci_menhir.mly" ( let body = match b with [e] -> @@ -15483,7 +15539,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct | _ -> b) | _ -> b in _1 (Ast0.wrap(Ast0.DOTS(body))) ) -# 15487 "parser_cocci_menhir.ml" +# 15543 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15505,9 +15561,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_initialize = -# 1060 "parser_cocci_menhir.mly" +# 1067 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.InitExpr(_1)) ) -# 15511 "parser_cocci_menhir.ml" +# 15567 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15538,20 +15594,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 15542 "parser_cocci_menhir.ml" +# 15598 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_initialize_list = Obj.magic _2 in let _1 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 15548 "parser_cocci_menhir.ml" +# 15604 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_initialize = -# 1062 "parser_cocci_menhir.mly" +# 1069 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) ) -# 15555 "parser_cocci_menhir.ml" +# 15611 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15577,21 +15633,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 15581 "parser_cocci_menhir.ml" +# 15637 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 15586 "parser_cocci_menhir.ml" +# 15642 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_initialize = -# 1064 "parser_cocci_menhir.mly" +# 1071 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.InitList(P.clt2mcode "{" _1,Ast0.wrap(Ast0.DOTS []), P.clt2mcode "}" _2)) ) -# 15595 "parser_cocci_menhir.ml" +# 15651 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15612,15 +15668,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 65 "parser_cocci_menhir.mly" (Parse_aux.info) -# 15616 "parser_cocci_menhir.ml" +# 15672 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_initialize = -# 1068 "parser_cocci_menhir.mly" +# 1075 "parser_cocci_menhir.mly" (let (nm,pure,clt) = _1 in Ast0.wrap(Ast0.MetaInit(P.clt2mcode nm clt,pure)) ) -# 15624 "parser_cocci_menhir.ml" +# 15680 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15642,9 +15698,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_initialize2 = -# 1074 "parser_cocci_menhir.mly" +# 1081 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.InitExpr(_1)) ) -# 15648 "parser_cocci_menhir.ml" +# 15704 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15675,20 +15731,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 15679 "parser_cocci_menhir.ml" +# 15735 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_initialize_list = Obj.magic _2 in let _1 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 15685 "parser_cocci_menhir.ml" +# 15741 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_initialize2 = -# 1076 "parser_cocci_menhir.mly" +# 1083 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) ) -# 15692 "parser_cocci_menhir.ml" +# 15748 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15714,21 +15770,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 15718 "parser_cocci_menhir.ml" +# 15774 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 15723 "parser_cocci_menhir.ml" +# 15779 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_initialize2 = -# 1078 "parser_cocci_menhir.mly" +# 1085 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.InitList(P.clt2mcode "{" _1,Ast0.wrap(Ast0.DOTS []), P.clt2mcode "}" _2)) ) -# 15732 "parser_cocci_menhir.ml" +# 15788 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15760,15 +15816,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 15764 "parser_cocci_menhir.ml" +# 15820 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_list_designator_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_initialize2 = -# 1083 "parser_cocci_menhir.mly" +# 1090 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.InitGccExt(_1,P.clt2mcode "=" _2,_3)) ) -# 15772 "parser_cocci_menhir.ml" +# 15828 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15800,15 +15856,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 15804 "parser_cocci_menhir.ml" +# 15860 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_ident = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_initialize2 = -# 1085 "parser_cocci_menhir.mly" +# 1092 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.InitGccName(_1,P.clt2mcode ":" _2,_3)) ) -# 15812 "parser_cocci_menhir.ml" +# 15868 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15830,9 +15886,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_initialize_list = -# 1097 "parser_cocci_menhir.mly" +# 1104 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS(_1)) ) -# 15836 "parser_cocci_menhir.ml" +# 15892 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15858,15 +15914,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 15862 "parser_cocci_menhir.ml" +# 15918 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_initialize2 = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_initialize_list_start = -# 1100 "parser_cocci_menhir.mly" +# 1107 "parser_cocci_menhir.mly" ( [_1;Ast0.wrap(Ast0.IComma(P.clt2mcode "," _2))] ) -# 15870 "parser_cocci_menhir.ml" +# 15926 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15898,15 +15954,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 15902 "parser_cocci_menhir.ml" +# 15958 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_initialize2 = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_initialize_list_start = -# 1102 "parser_cocci_menhir.mly" +# 1109 "parser_cocci_menhir.mly" ( _1::Ast0.wrap(Ast0.IComma(P.clt2mcode "," _2))::_3 ) -# 15910 "parser_cocci_menhir.ml" +# 15966 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15934,10 +15990,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_d_ in let _endpos = _endpos_r_ in let _v : 'tv_initialize_list_start = -# 1105 "parser_cocci_menhir.mly" +# 1112 "parser_cocci_menhir.mly" ( (P.mkidots "..." d):: (List.concat(List.map (function x -> x (P.mkidots "...")) r)) ) -# 15941 "parser_cocci_menhir.ml" +# 15997 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15957,9 +16013,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_invalid = -# 1198 "parser_cocci_menhir.mly" +# 1205 "parser_cocci_menhir.mly" ( raise (Semantic_cocci.Semantic "not matchable") ) -# 15963 "parser_cocci_menhir.ml" +# 16019 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15976,7 +16032,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_is_expression = # 248 "parser_cocci_menhir.mly" ( false ) -# 15980 "parser_cocci_menhir.ml" +# 16036 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15998,7 +16054,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_is_expression = # 249 "parser_cocci_menhir.mly" ( true ) -# 16002 "parser_cocci_menhir.ml" +# 16058 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16024,9 +16080,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_t_ in let _v : 'tv_iso_ctype_ = -# 1882 "parser_cocci_menhir.mly" +# 1935 "parser_cocci_menhir.mly" ( Common.Left t ) -# 16030 "parser_cocci_menhir.ml" +# 16086 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16052,9 +16108,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_t_ in let _v : 'tv_iso_ctype_ = -# 1883 "parser_cocci_menhir.mly" +# 1936 "parser_cocci_menhir.mly" ( Common.Right t ) -# 16058 "parser_cocci_menhir.ml" +# 16114 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16080,9 +16136,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_t_ in let _v : 'tv_iso_decl_var_ = -# 1882 "parser_cocci_menhir.mly" +# 1935 "parser_cocci_menhir.mly" ( Common.Left t ) -# 16086 "parser_cocci_menhir.ml" +# 16142 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16108,9 +16164,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_t_ in let _v : 'tv_iso_decl_var_ = -# 1883 "parser_cocci_menhir.mly" +# 1936 "parser_cocci_menhir.mly" ( Common.Right t ) -# 16114 "parser_cocci_menhir.ml" +# 16170 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16136,9 +16192,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_t_ in let _v : 'tv_iso_dexpr_ = -# 1882 "parser_cocci_menhir.mly" +# 1935 "parser_cocci_menhir.mly" ( Common.Left t ) -# 16142 "parser_cocci_menhir.ml" +# 16198 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16164,9 +16220,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_t_ in let _v : 'tv_iso_dexpr_ = -# 1883 "parser_cocci_menhir.mly" +# 1936 "parser_cocci_menhir.mly" ( Common.Right t ) -# 16170 "parser_cocci_menhir.ml" +# 16226 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16192,9 +16248,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_t_ in let _v : 'tv_iso_nest_start_ = -# 1882 "parser_cocci_menhir.mly" +# 1935 "parser_cocci_menhir.mly" ( Common.Left t ) -# 16198 "parser_cocci_menhir.ml" +# 16254 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16220,9 +16276,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_t_ in let _v : 'tv_iso_nest_start_ = -# 1883 "parser_cocci_menhir.mly" +# 1936 "parser_cocci_menhir.mly" ( Common.Right t ) -# 16226 "parser_cocci_menhir.ml" +# 16282 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16248,9 +16304,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_t_ in let _v : 'tv_iso_single_statement_ = -# 1882 "parser_cocci_menhir.mly" +# 1935 "parser_cocci_menhir.mly" ( Common.Left t ) -# 16254 "parser_cocci_menhir.ml" +# 16310 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16276,9 +16332,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_t_ in let _v : 'tv_iso_single_statement_ = -# 1883 "parser_cocci_menhir.mly" +# 1936 "parser_cocci_menhir.mly" ( Common.Right t ) -# 16282 "parser_cocci_menhir.ml" +# 16338 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16316,11 +16372,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 162 "parser_cocci_menhir.mly" (Ast0_cocci.anything list list) -# 16320 "parser_cocci_menhir.ml" +# 16376 "parser_cocci_menhir.ml" ) = -# 1854 "parser_cocci_menhir.mly" +# 1907 "parser_cocci_menhir.mly" ( P.iso_adjust (function x -> Ast0.ExprTag x) e1 el ) -# 16324 "parser_cocci_menhir.ml" +# 16380 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16358,11 +16414,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 162 "parser_cocci_menhir.mly" (Ast0_cocci.anything list list) -# 16362 "parser_cocci_menhir.ml" +# 16418 "parser_cocci_menhir.ml" ) = -# 1856 "parser_cocci_menhir.mly" +# 1909 "parser_cocci_menhir.mly" ( P.iso_adjust (function x -> Ast0.ArgExprTag x) e1 el ) -# 16366 "parser_cocci_menhir.ml" +# 16422 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16400,11 +16456,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 162 "parser_cocci_menhir.mly" (Ast0_cocci.anything list list) -# 16404 "parser_cocci_menhir.ml" +# 16460 "parser_cocci_menhir.ml" ) = -# 1858 "parser_cocci_menhir.mly" +# 1911 "parser_cocci_menhir.mly" ( P.iso_adjust (function x -> Ast0.TestExprTag x) e1 el ) -# 16408 "parser_cocci_menhir.ml" +# 16464 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16442,11 +16498,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 162 "parser_cocci_menhir.mly" (Ast0_cocci.anything list list) -# 16446 "parser_cocci_menhir.ml" +# 16502 "parser_cocci_menhir.ml" ) = -# 1860 "parser_cocci_menhir.mly" +# 1913 "parser_cocci_menhir.mly" ( P.iso_adjust (function x -> Ast0.StmtTag x) s1 sl ) -# 16450 "parser_cocci_menhir.ml" +# 16506 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16484,11 +16540,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 162 "parser_cocci_menhir.mly" (Ast0_cocci.anything list list) -# 16488 "parser_cocci_menhir.ml" +# 16544 "parser_cocci_menhir.ml" ) = -# 1862 "parser_cocci_menhir.mly" +# 1915 "parser_cocci_menhir.mly" ( P.iso_adjust (function x -> Ast0.TypeCTag x) t1 tl ) -# 16492 "parser_cocci_menhir.ml" +# 16548 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16526,11 +16582,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 162 "parser_cocci_menhir.mly" (Ast0_cocci.anything list list) -# 16530 "parser_cocci_menhir.ml" +# 16586 "parser_cocci_menhir.ml" ) = -# 1864 "parser_cocci_menhir.mly" +# 1917 "parser_cocci_menhir.mly" ( P.iso_adjust (function x -> Ast0.DotsStmtTag x) e1 el ) -# 16534 "parser_cocci_menhir.ml" +# 16590 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16568,9 +16624,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 162 "parser_cocci_menhir.mly" (Ast0_cocci.anything list list) -# 16572 "parser_cocci_menhir.ml" +# 16628 "parser_cocci_menhir.ml" ) = -# 1866 "parser_cocci_menhir.mly" +# 1919 "parser_cocci_menhir.mly" ( let check_one = function [x] -> x | _ -> @@ -16585,7 +16641,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct | Common.Right x -> Common.Right(check_one x)) dl in P.iso_adjust (function x -> Ast0.DeclTag x) d1 dl ) -# 16589 "parser_cocci_menhir.ml" +# 16645 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16609,11 +16665,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 165 "parser_cocci_menhir.mly" ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 16613 "parser_cocci_menhir.ml" +# 16669 "parser_cocci_menhir.ml" ) = # 182 "parser_cocci_menhir.mly" ( m "" ) -# 16617 "parser_cocci_menhir.ml" +# 16673 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16641,11 +16697,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 149 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 16645 "parser_cocci_menhir.ml" +# 16701 "parser_cocci_menhir.ml" ) = # 197 "parser_cocci_menhir.mly" ( P.make_iso_rule_name_result (P.id2name nm) ) -# 16649 "parser_cocci_menhir.ml" +# 16705 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16666,14 +16722,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 16670 "parser_cocci_menhir.ml" +# 16726 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_iter_ident = -# 1539 "parser_cocci_menhir.mly" +# 1592 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 16677 "parser_cocci_menhir.ml" +# 16733 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16694,15 +16750,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 62 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 16698 "parser_cocci_menhir.ml" +# 16754 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_iter_ident = -# 1541 "parser_cocci_menhir.mly" +# 1594 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,clt) = _1 in Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) ) -# 16706 "parser_cocci_menhir.ml" +# 16762 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16719,7 +16775,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_TMul_ = # 114 "standard.mly" ( [] ) -# 16723 "parser_cocci_menhir.ml" +# 16779 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16746,14 +16802,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let x : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 16750 "parser_cocci_menhir.ml" +# 16806 "parser_cocci_menhir.ml" ) = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in let _v : 'tv_list_TMul_ = # 116 "standard.mly" ( x :: xs ) -# 16757 "parser_cocci_menhir.ml" +# 16813 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16770,7 +16826,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_array_dec_ = # 114 "standard.mly" ( [] ) -# 16774 "parser_cocci_menhir.ml" +# 16830 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16800,7 +16856,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_array_dec_ = # 116 "standard.mly" ( x :: xs ) -# 16804 "parser_cocci_menhir.ml" +# 16860 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16817,7 +16873,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_case_line_ = # 114 "standard.mly" ( [] ) -# 16821 "parser_cocci_menhir.ml" +# 16877 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16847,7 +16903,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_case_line_ = # 116 "standard.mly" ( x :: xs ) -# 16851 "parser_cocci_menhir.ml" +# 16907 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16864,7 +16920,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_comma_decls_TEllipsis_decl__ = # 114 "standard.mly" ( [] ) -# 16868 "parser_cocci_menhir.ml" +# 16924 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16894,7 +16950,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_comma_decls_TEllipsis_decl__ = # 116 "standard.mly" ( x :: xs ) -# 16898 "parser_cocci_menhir.ml" +# 16954 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16911,7 +16967,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = # 114 "standard.mly" ( [] ) -# 16915 "parser_cocci_menhir.ml" +# 16971 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16941,7 +16997,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = # 116 "standard.mly" ( x :: xs ) -# 16945 "parser_cocci_menhir.ml" +# 17001 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16958,7 +17014,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_decl_var_ = # 114 "standard.mly" ( [] ) -# 16962 "parser_cocci_menhir.ml" +# 17018 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16988,7 +17044,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_decl_var_ = # 116 "standard.mly" ( x :: xs ) -# 16992 "parser_cocci_menhir.ml" +# 17048 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17005,7 +17061,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_designator_ = # 114 "standard.mly" ( [] ) -# 17009 "parser_cocci_menhir.ml" +# 17065 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17035,7 +17091,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_designator_ = # 116 "standard.mly" ( x :: xs ) -# 17039 "parser_cocci_menhir.ml" +# 17095 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17052,7 +17108,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_dp_comma_args_TEllipsis__ = # 114 "standard.mly" ( [] ) -# 17056 "parser_cocci_menhir.ml" +# 17112 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17082,7 +17138,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_dp_comma_args_TEllipsis__ = # 116 "standard.mly" ( x :: xs ) -# 17086 "parser_cocci_menhir.ml" +# 17142 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17099,7 +17155,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_incl_ = # 114 "standard.mly" ( [] ) -# 17103 "parser_cocci_menhir.ml" +# 17159 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17129,7 +17185,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_incl_ = # 116 "standard.mly" ( x :: xs ) -# 17133 "parser_cocci_menhir.ml" +# 17189 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17146,7 +17202,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_iso_ctype__ = # 114 "standard.mly" ( [] ) -# 17150 "parser_cocci_menhir.ml" +# 17206 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17176,7 +17232,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_iso_ctype__ = # 116 "standard.mly" ( x :: xs ) -# 17180 "parser_cocci_menhir.ml" +# 17236 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17193,7 +17249,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_iso_decl_var__ = # 114 "standard.mly" ( [] ) -# 17197 "parser_cocci_menhir.ml" +# 17253 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17223,7 +17279,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_iso_decl_var__ = # 116 "standard.mly" ( x :: xs ) -# 17227 "parser_cocci_menhir.ml" +# 17283 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17240,7 +17296,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_iso_dexpr__ = # 114 "standard.mly" ( [] ) -# 17244 "parser_cocci_menhir.ml" +# 17300 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17270,7 +17326,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_iso_dexpr__ = # 116 "standard.mly" ( x :: xs ) -# 17274 "parser_cocci_menhir.ml" +# 17330 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17287,7 +17343,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_iso_nest_start__ = # 114 "standard.mly" ( [] ) -# 17291 "parser_cocci_menhir.ml" +# 17347 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17317,7 +17373,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_iso_nest_start__ = # 116 "standard.mly" ( x :: xs ) -# 17321 "parser_cocci_menhir.ml" +# 17377 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17334,7 +17390,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_iso_single_statement__ = # 114 "standard.mly" ( [] ) -# 17338 "parser_cocci_menhir.ml" +# 17394 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17364,7 +17420,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_iso_single_statement__ = # 116 "standard.mly" ( x :: xs ) -# 17368 "parser_cocci_menhir.ml" +# 17424 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17381,7 +17437,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_mzl_ctype__ = # 114 "standard.mly" ( [] ) -# 17385 "parser_cocci_menhir.ml" +# 17441 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17411,7 +17467,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_mzl_ctype__ = # 116 "standard.mly" ( x :: xs ) -# 17415 "parser_cocci_menhir.ml" +# 17471 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17428,7 +17484,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_mzl_eexpr__ = # 114 "standard.mly" ( [] ) -# 17432 "parser_cocci_menhir.ml" +# 17488 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17458,7 +17514,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_mzl_eexpr__ = # 116 "standard.mly" ( x :: xs ) -# 17462 "parser_cocci_menhir.ml" +# 17518 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17475,7 +17531,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_mzl_fun_after_dots_or__ = # 114 "standard.mly" ( [] ) -# 17479 "parser_cocci_menhir.ml" +# 17535 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17505,7 +17561,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_mzl_fun_after_dots_or__ = # 116 "standard.mly" ( x :: xs ) -# 17509 "parser_cocci_menhir.ml" +# 17565 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17522,7 +17578,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_mzl_fun_start__ = # 114 "standard.mly" ( [] ) -# 17526 "parser_cocci_menhir.ml" +# 17582 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17552,7 +17608,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_mzl_fun_start__ = # 116 "standard.mly" ( x :: xs ) -# 17556 "parser_cocci_menhir.ml" +# 17612 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17569,7 +17625,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_mzl_rule_elem_statement__ = # 114 "standard.mly" ( [] ) -# 17573 "parser_cocci_menhir.ml" +# 17629 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17599,7 +17655,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_mzl_rule_elem_statement__ = # 116 "standard.mly" ( x :: xs ) -# 17603 "parser_cocci_menhir.ml" +# 17659 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17616,7 +17672,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_mzl_statement__ = # 114 "standard.mly" ( [] ) -# 17620 "parser_cocci_menhir.ml" +# 17676 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17646,7 +17702,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_mzl_statement__ = # 116 "standard.mly" ( x :: xs ) -# 17650 "parser_cocci_menhir.ml" +# 17706 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17663,7 +17719,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = # 114 "standard.mly" ( [] ) -# 17667 "parser_cocci_menhir.ml" +# 17723 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17702,13 +17758,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 70 "standard.mly" ( (x, y) ) -# 17706 "parser_cocci_menhir.ml" +# 17762 "parser_cocci_menhir.ml" in # 116 "standard.mly" ( x :: xs ) -# 17712 "parser_cocci_menhir.ml" +# 17768 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17725,7 +17781,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_whenppdecs_ = # 114 "standard.mly" ( [] ) -# 17729 "parser_cocci_menhir.ml" +# 17785 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17755,7 +17811,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_list_whenppdecs_ = # 116 "standard.mly" ( x :: xs ) -# 17759 "parser_cocci_menhir.ml" +# 17815 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17772,7 +17828,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_choose_iso_ = # 57 "standard.mly" ( [] ) -# 17776 "parser_cocci_menhir.ml" +# 17832 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17796,7 +17852,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_choose_iso_ = # 59 "standard.mly" ( x ) -# 17800 "parser_cocci_menhir.ml" +# 17856 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17813,7 +17869,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_disable_ = # 57 "standard.mly" ( [] ) -# 17817 "parser_cocci_menhir.ml" +# 17873 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17837,7 +17893,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_disable_ = # 59 "standard.mly" ( x ) -# 17841 "parser_cocci_menhir.ml" +# 17897 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17854,7 +17910,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_filespec_ = # 57 "standard.mly" ( [] ) -# 17858 "parser_cocci_menhir.ml" +# 17914 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17878,7 +17934,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_filespec_ = # 59 "standard.mly" ( x ) -# 17882 "parser_cocci_menhir.ml" +# 17938 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17895,7 +17951,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_minus_start_ = # 57 "standard.mly" ( [] ) -# 17899 "parser_cocci_menhir.ml" +# 17955 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17919,7 +17975,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_minus_start_ = # 59 "standard.mly" ( x ) -# 17923 "parser_cocci_menhir.ml" +# 17979 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17936,7 +17992,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_not_ceq_ = # 57 "standard.mly" ( [] ) -# 17940 "parser_cocci_menhir.ml" +# 17996 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17960,89 +18016,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_not_ceq_ = # 59 "standard.mly" ( x ) -# 17964 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_loption_not_eq_ = -# 57 "standard.mly" - ( [] ) -# 17981 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let x : 'tv_not_eq = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_not_eq_ = -# 59 "standard.mly" - ( x ) -# 18005 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_loption_not_eqe_ = -# 57 "standard.mly" - ( [] ) -# 18022 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let x : 'tv_not_eqe = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_not_eqe_ = -# 59 "standard.mly" - ( x ) -# 18046 "parser_cocci_menhir.ml" +# 18020 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18059,7 +18033,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_not_pos_ = # 57 "standard.mly" ( [] ) -# 18063 "parser_cocci_menhir.ml" +# 18037 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18083,7 +18057,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_not_pos_ = # 59 "standard.mly" ( x ) -# 18087 "parser_cocci_menhir.ml" +# 18061 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18100,7 +18074,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_plus_start_ = # 57 "standard.mly" ( [] ) -# 18104 "parser_cocci_menhir.ml" +# 18078 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18124,7 +18098,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_loption_plus_start_ = # 59 "standard.mly" ( x ) -# 18128 "parser_cocci_menhir.ml" +# 18102 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18146,9 +18120,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_t_ in let _endpos = _endpos_t_ in let _v : 'tv_meta_exp_type = -# 453 "parser_cocci_menhir.mly" +# 460 "parser_cocci_menhir.mly" ( [Ast0_cocci.ast0_type_to_type t] ) -# 18152 "parser_cocci_menhir.ml" +# 18126 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18184,11 +18158,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_m_ in let _v : 'tv_meta_exp_type = -# 455 "parser_cocci_menhir.mly" +# 462 "parser_cocci_menhir.mly" ( List.map (function x -> P.ty_pointerify (Ast0_cocci.ast0_type_to_type x) m) t ) -# 18192 "parser_cocci_menhir.ml" +# 18166 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18219,14 +18193,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 47 "parser_cocci_menhir.mly" (string) -# 18223 "parser_cocci_menhir.ml" +# 18197 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_meta_ident = -# 1384 "parser_cocci_menhir.mly" +# 1391 "parser_cocci_menhir.mly" ( (Some _1,P.id2name _3) ) -# 18230 "parser_cocci_menhir.ml" +# 18204 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18250,11 +18224,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 157 "parser_cocci_menhir.mly" ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 18254 "parser_cocci_menhir.ml" +# 18228 "parser_cocci_menhir.ml" ) = # 181 "parser_cocci_menhir.mly" ( m (!Ast0.rule_name) ) -# 18258 "parser_cocci_menhir.ml" +# 18232 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18297,17 +18271,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__5_ in let _v : 'tv_metadec = let kindfn = -# 318 "parser_cocci_menhir.mly" +# 325 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta -> let tok = check_meta(Ast.MetaParamDecl(arity,name)) in !Data.add_param_meta name pure; tok) ) -# 18305 "parser_cocci_menhir.ml" +# 18279 "parser_cocci_menhir.ml" in -# 263 "parser_cocci_menhir.mly" +# 270 "parser_cocci_menhir.mly" ( P.create_metadec ar ispure kindfn ids ) -# 18311 "parser_cocci_menhir.ml" +# 18285 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18354,17 +18328,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__6_ in let _v : 'tv_metadec = let kindfn = -# 322 "parser_cocci_menhir.mly" +# 329 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta -> let tok = check_meta(Ast.MetaParamListDecl(arity,name,None)) in !Data.add_paramlist_meta name None pure; tok) ) -# 18362 "parser_cocci_menhir.ml" +# 18336 "parser_cocci_menhir.ml" in -# 263 "parser_cocci_menhir.mly" +# 270 "parser_cocci_menhir.mly" ( P.create_metadec ar ispure kindfn ids ) -# 18368 "parser_cocci_menhir.ml" +# 18342 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18411,17 +18385,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__6_ in let _v : 'tv_metadec = let kindfn = -# 326 "parser_cocci_menhir.mly" +# 333 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta -> let tok = check_meta(Ast.MetaExpListDecl(arity,name,None)) in !Data.add_explist_meta name None pure; tok) ) -# 18419 "parser_cocci_menhir.ml" +# 18393 "parser_cocci_menhir.ml" in -# 263 "parser_cocci_menhir.mly" +# 270 "parser_cocci_menhir.mly" ( P.create_metadec ar ispure kindfn ids ) -# 18425 "parser_cocci_menhir.ml" +# 18399 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18464,17 +18438,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__5_ in let _v : 'tv_metadec = let kindfn = -# 330 "parser_cocci_menhir.mly" +# 337 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta -> let tok = check_meta(Ast.MetaTypeDecl(arity,name)) in !Data.add_type_meta name pure; tok) ) -# 18472 "parser_cocci_menhir.ml" +# 18446 "parser_cocci_menhir.ml" in -# 263 "parser_cocci_menhir.mly" +# 270 "parser_cocci_menhir.mly" ( P.create_metadec ar ispure kindfn ids ) -# 18478 "parser_cocci_menhir.ml" +# 18452 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18517,17 +18491,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__5_ in let _v : 'tv_metadec = let kindfn = -# 334 "parser_cocci_menhir.mly" +# 341 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta -> let tok = check_meta(Ast.MetaInitDecl(arity,name)) in !Data.add_init_meta name pure; tok) ) -# 18525 "parser_cocci_menhir.ml" +# 18499 "parser_cocci_menhir.ml" in -# 263 "parser_cocci_menhir.mly" +# 270 "parser_cocci_menhir.mly" ( P.create_metadec ar ispure kindfn ids ) -# 18531 "parser_cocci_menhir.ml" +# 18505 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18570,17 +18544,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__5_ in let _v : 'tv_metadec = let kindfn = -# 338 "parser_cocci_menhir.mly" +# 345 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta -> let tok = check_meta(Ast.MetaStmDecl(arity,name)) in !Data.add_stm_meta name pure; tok) ) -# 18578 "parser_cocci_menhir.ml" +# 18552 "parser_cocci_menhir.ml" in -# 263 "parser_cocci_menhir.mly" +# 270 "parser_cocci_menhir.mly" ( P.create_metadec ar ispure kindfn ids ) -# 18584 "parser_cocci_menhir.ml" +# 18558 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18627,17 +18601,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__6_ in let _v : 'tv_metadec = let kindfn = -# 342 "parser_cocci_menhir.mly" +# 349 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta -> let tok = check_meta(Ast.MetaStmListDecl(arity,name)) in !Data.add_stmlist_meta name pure; tok) ) -# 18635 "parser_cocci_menhir.ml" +# 18609 "parser_cocci_menhir.ml" in -# 263 "parser_cocci_menhir.mly" +# 270 "parser_cocci_menhir.mly" ( P.create_metadec ar ispure kindfn ids ) -# 18641 "parser_cocci_menhir.ml" +# 18615 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18680,18 +18654,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__5_ in let _v : 'tv_metadec = let kindfn = -# 346 "parser_cocci_menhir.mly" +# 353 "parser_cocci_menhir.mly" ( (fun arity (_,name) pure check_meta -> if arity = Ast.NONE && pure = Ast0.Impure then (!Data.add_type_name name; []) else raise (Semantic_cocci.Semantic "bad typedef")) ) -# 18689 "parser_cocci_menhir.ml" +# 18663 "parser_cocci_menhir.ml" in -# 263 "parser_cocci_menhir.mly" +# 270 "parser_cocci_menhir.mly" ( P.create_metadec ar ispure kindfn ids ) -# 18695 "parser_cocci_menhir.ml" +# 18669 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18738,18 +18712,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__6_ in let _v : 'tv_metadec = let kindfn = -# 351 "parser_cocci_menhir.mly" +# 358 "parser_cocci_menhir.mly" ( (fun arity (_,name) pure check_meta -> if arity = Ast.NONE && pure = Ast0.Impure then (!Data.add_declarer_name name; []) else raise (Semantic_cocci.Semantic "bad declarer")) ) -# 18747 "parser_cocci_menhir.ml" +# 18721 "parser_cocci_menhir.ml" in -# 263 "parser_cocci_menhir.mly" +# 270 "parser_cocci_menhir.mly" ( P.create_metadec ar ispure kindfn ids ) -# 18753 "parser_cocci_menhir.ml" +# 18727 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18796,18 +18770,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__6_ in let _v : 'tv_metadec = let kindfn = -# 356 "parser_cocci_menhir.mly" +# 363 "parser_cocci_menhir.mly" ( (fun arity (_,name) pure check_meta -> if arity = Ast.NONE && pure = Ast0.Impure then (!Data.add_iterator_name name; []) else raise (Semantic_cocci.Semantic "bad iterator")) ) -# 18805 "parser_cocci_menhir.ml" +# 18779 "parser_cocci_menhir.ml" in -# 263 "parser_cocci_menhir.mly" +# 270 "parser_cocci_menhir.mly" ( P.create_metadec ar ispure kindfn ids ) -# 18811 "parser_cocci_menhir.ml" +# 18785 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18842,17 +18816,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__4_ in let _v : 'tv_metadec = let kindfn = -# 312 "parser_cocci_menhir.mly" +# 319 "parser_cocci_menhir.mly" ( (fun name check_meta seed -> let tok = check_meta(Ast.MetaFreshIdDecl(name,seed)) in !Data.add_fresh_id_meta name; tok) ) -# 18850 "parser_cocci_menhir.ml" +# 18824 "parser_cocci_menhir.ml" in -# 266 "parser_cocci_menhir.mly" +# 273 "parser_cocci_menhir.mly" ( P.create_fresh_metadec kindfn ids ) -# 18856 "parser_cocci_menhir.ml" +# 18830 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18888,24 +18862,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = Obj.magic ids in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in let _startpos = _startpos_ar_ in let _endpos = _endpos__5_ in let _v : 'tv_metadec = let kindfn = -# 364 "parser_cocci_menhir.mly" +# 370 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let tok = check_meta(Ast.MetaIdDecl(arity,name)) in !Data.add_id_meta name constraints pure; tok) ) -# 18903 "parser_cocci_menhir.ml" +# 18877 "parser_cocci_menhir.ml" in -# 270 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 18909 "parser_cocci_menhir.ml" +# 277 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 18883 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18941,24 +18915,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = Obj.magic ids in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in let _startpos = _startpos_ar_ in let _endpos = _endpos__5_ in let _v : 'tv_metadec = let kindfn = -# 368 "parser_cocci_menhir.mly" +# 374 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let tok = check_meta(Ast.MetaFuncDecl(arity,name)) in !Data.add_func_meta name constraints pure; tok) ) -# 18956 "parser_cocci_menhir.ml" +# 18930 "parser_cocci_menhir.ml" in -# 270 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 18962 "parser_cocci_menhir.ml" +# 277 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 18936 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18998,25 +18972,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = Obj.magic ids in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in let _startpos = _startpos_ar_ in let _endpos = _endpos__6_ in let _v : 'tv_metadec = let kindfn = -# 372 "parser_cocci_menhir.mly" +# 378 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let tok = check_meta(Ast.MetaLocalFuncDecl(arity,name)) in !Data.add_local_func_meta name constraints pure; tok) ) -# 19014 "parser_cocci_menhir.ml" +# 18988 "parser_cocci_menhir.ml" in -# 270 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19020 "parser_cocci_menhir.ml" +# 277 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 18994 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19052,24 +19026,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = Obj.magic ids in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in let _startpos = _startpos_ar_ in let _endpos = _endpos__5_ in let _v : 'tv_metadec = let kindfn = -# 377 "parser_cocci_menhir.mly" +# 383 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let tok = check_meta(Ast.MetaDeclarerDecl(arity,name)) in !Data.add_declarer_meta name constraints pure; tok) ) -# 19067 "parser_cocci_menhir.ml" +# 19041 "parser_cocci_menhir.ml" in -# 270 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19073 "parser_cocci_menhir.ml" +# 277 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 19047 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19105,24 +19079,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = Obj.magic ids in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in let _startpos = _startpos_ar_ in let _endpos = _endpos__5_ in let _v : 'tv_metadec = let kindfn = -# 381 "parser_cocci_menhir.mly" +# 387 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let tok = check_meta(Ast.MetaIteratorDecl(arity,name)) in !Data.add_iterator_meta name constraints pure; tok) ) -# 19120 "parser_cocci_menhir.ml" +# 19094 "parser_cocci_menhir.ml" in -# 270 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19126 "parser_cocci_menhir.ml" +# 277 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 19100 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19158,24 +19132,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = Obj.magic ids in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in let _startpos = _startpos_ar_ in let _endpos = _endpos__5_ in let _v : 'tv_metadec = let kindfn = -# 387 "parser_cocci_menhir.mly" +# 393 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let tok = check_meta(Ast.MetaErrDecl(arity,name)) in !Data.add_err_meta name constraints pure; tok) ) -# 19173 "parser_cocci_menhir.ml" +# 19147 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19179 "parser_cocci_menhir.ml" +# 281 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 19153 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19216,7 +19190,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = Obj.magic ids in let l0 : 'tv_option_TLocal_ = Obj.magic l0 in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in @@ -19228,11 +19202,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 19232 "parser_cocci_menhir.ml" +# 19206 "parser_cocci_menhir.ml" in -# 391 "parser_cocci_menhir.mly" +# 397 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> match l with None -> @@ -19241,13 +19215,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct | Some _ -> !Data.add_local_idexp_meta ty name constraints pure; check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) ) -# 19245 "parser_cocci_menhir.ml" +# 19219 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19251 "parser_cocci_menhir.ml" +# 281 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 19225 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19293,7 +19267,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = Obj.magic ids in let x00 : 'tv_meta_exp_type = Obj.magic x00 in let l0 : 'tv_option_TLocal_ = Obj.magic l0 in let ispure : 'tv_pure = Obj.magic ispure in @@ -19308,11 +19282,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 19312 "parser_cocci_menhir.ml" +# 19286 "parser_cocci_menhir.ml" in -# 391 "parser_cocci_menhir.mly" +# 397 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> match l with None -> @@ -19321,13 +19295,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct | Some _ -> !Data.add_local_idexp_meta ty name constraints pure; check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) ) -# 19325 "parser_cocci_menhir.ml" +# 19299 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19331 "parser_cocci_menhir.ml" +# 281 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 19305 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19373,7 +19347,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = Obj.magic ids in let m0 : 'tv_nonempty_list_TMul_ = Obj.magic m0 in let l0 : 'tv_option_TLocal_ = Obj.magic l0 in let ispure : 'tv_pure = Obj.magic ispure in @@ -19384,7 +19358,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let m = m0 in let l = l0 in -# 400 "parser_cocci_menhir.mly" +# 406 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let ty = Some [P.ty_pointerify Type_cocci.Unknown m] in match l with @@ -19394,13 +19368,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct | Some _ -> !Data.add_local_idexp_meta ty name constraints pure; check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) ) -# 19398 "parser_cocci_menhir.ml" +# 19372 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19404 "parser_cocci_menhir.ml" +# 281 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 19378 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19441,7 +19415,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = Obj.magic ids in let m0 : 'tv_nonempty_list_TMul_ = Obj.magic m0 in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in @@ -19450,18 +19424,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_metadec = let kindfn = let m = m0 in -# 410 "parser_cocci_menhir.mly" +# 416 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let ty = Some [P.ty_pointerify Type_cocci.Unknown m] in let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in !Data.add_exp_meta ty name constraints pure; tok) ) -# 19459 "parser_cocci_menhir.ml" +# 19433 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19465 "parser_cocci_menhir.ml" +# 281 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 19439 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19506,7 +19480,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = Obj.magic ids in let vl0 : 'tv_meta_exp_type = Obj.magic vl0 in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in @@ -19515,18 +19489,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_metadec = let kindfn = let vl = vl0 in -# 415 "parser_cocci_menhir.mly" +# 421 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let ty = Some (List.map (function x -> Type_cocci.Array x) vl) in let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in !Data.add_exp_meta ty name constraints pure; tok) ) -# 19524 "parser_cocci_menhir.ml" +# 19498 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19530 "parser_cocci_menhir.ml" +# 281 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 19504 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19562,7 +19536,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = Obj.magic ids in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in let _startpos = _startpos_ar_ in @@ -19572,21 +19546,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 19576 "parser_cocci_menhir.ml" +# 19550 "parser_cocci_menhir.ml" in -# 420 "parser_cocci_menhir.mly" +# 426 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let tok = check_meta(Ast.MetaConstDecl(arity,name,ty)) in !Data.add_const_meta ty name constraints pure; tok) ) -# 19584 "parser_cocci_menhir.ml" +# 19558 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19590 "parser_cocci_menhir.ml" +# 281 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 19564 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19627,7 +19601,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = Obj.magic ids in let x00 : 'tv_meta_exp_type = Obj.magic x00 in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in @@ -19640,21 +19614,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 19644 "parser_cocci_menhir.ml" +# 19618 "parser_cocci_menhir.ml" in -# 420 "parser_cocci_menhir.mly" +# 426 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let tok = check_meta(Ast.MetaConstDecl(arity,name,ty)) in !Data.add_const_meta ty name constraints pure; tok) ) -# 19652 "parser_cocci_menhir.ml" +# 19626 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19658 "parser_cocci_menhir.ml" +# 281 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 19632 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19690,24 +19664,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_x_eq_not_ceq__ = Obj.magic ids in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in let _startpos = _startpos_ar_ in let _endpos = _endpos__5_ in let _v : 'tv_metadec = let kindfn = -# 426 "parser_cocci_menhir.mly" +# 432 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let tok = check_meta(Ast.MetaExpDecl(arity,name,None)) in - !Data.add_exp_meta None name constraints pure; tok) ) -# 19705 "parser_cocci_menhir.ml" + !Data.add_exp_meta None name (Ast0.NotExpCstrt constraints) pure; tok) ) +# 19679 "parser_cocci_menhir.ml" in -# 278 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19711 "parser_cocci_menhir.ml" +# 285 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 19685 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19744,7 +19718,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_x_eq_not_ceq__ = Obj.magic ids in let vl0 : 'tv_meta_exp_type = Obj.magic vl0 in let ispure : 'tv_pure = Obj.magic ispure in let ar : 'tv_arity = Obj.magic ar in @@ -19753,7 +19727,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_metadec = let kindfn = let vl = vl0 in -# 430 "parser_cocci_menhir.mly" +# 436 "parser_cocci_menhir.mly" ( (fun arity name pure check_meta constraints -> let ty = Some vl in List.iter @@ -19772,14 +19746,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct | _ -> ()) constraints; let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in - !Data.add_exp_meta ty name constraints pure; tok) ) -# 19777 "parser_cocci_menhir.ml" + !Data.add_exp_meta ty name (Ast0.NotExpCstrt constraints) pure; tok) + ) +# 19752 "parser_cocci_menhir.ml" in -# 278 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 19783 "parser_cocci_menhir.ml" +# 285 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 19758 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19815,21 +19790,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_pos__ = Obj.magic ids in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_x_eq_not_pos__ = Obj.magic ids in let a : 'tv_option_TPosAny_ = Obj.magic a in let ar : 'tv_arity = Obj.magic ar in let _startpos = _startpos_ar_ in let _endpos = _endpos__5_ in let _v : 'tv_metadec = -# 284 "parser_cocci_menhir.mly" +# 291 "parser_cocci_menhir.mly" ( (if !Data.in_generating then failwith "position variables not allowed in a generated rule file"); let kindfn arity name pure check_meta constraints = let tok = check_meta(Ast.MetaPosDecl(arity,name)) in let any = match a with None -> Ast.PER | Some _ -> Ast.ALL in !Data.add_pos_meta name constraints any; tok in - P.create_metadec_ne ar false kindfn ids ) -# 19833 "parser_cocci_menhir.ml" + P.create_metadec_with_constraints ar false kindfn ids ) +# 19808 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19889,14 +19864,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_ar_ in let _endpos = _endpos__9_ in let _v : 'tv_metadec = -# 294 "parser_cocci_menhir.mly" +# 301 "parser_cocci_menhir.mly" ( P.create_len_metadec ar ispure (fun lenname arity name pure check_meta -> let tok = check_meta(Ast.MetaParamListDecl(arity,name,Some lenname)) in !Data.add_paramlist_meta name (Some lenname) pure; tok) id ids ) -# 19900 "parser_cocci_menhir.ml" +# 19875 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19956,14 +19931,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_ar_ in let _endpos = _endpos__9_ in let _v : 'tv_metadec = -# 303 "parser_cocci_menhir.mly" +# 310 "parser_cocci_menhir.mly" ( P.create_len_metadec ar ispure (fun lenname arity name pure check_meta -> let tok = check_meta(Ast.MetaExpListDecl(arity,name,Some lenname)) in !Data.add_explist_meta name (Some lenname) pure; tok) id ids ) -# 19967 "parser_cocci_menhir.ml" +# 19942 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19991,9 +19966,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_midzero_list_ctype_ctype_ = -# 1824 "parser_cocci_menhir.mly" +# 1877 "parser_cocci_menhir.mly" ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 19997 "parser_cocci_menhir.ml" +# 19972 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20021,9 +19996,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_midzero_list_eexpr_eexpr_ = -# 1824 "parser_cocci_menhir.mly" +# 1877 "parser_cocci_menhir.mly" ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 20027 "parser_cocci_menhir.ml" +# 20002 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20051,9 +20026,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_midzero_list_expr_eexpr_ = -# 1824 "parser_cocci_menhir.mly" +# 1877 "parser_cocci_menhir.mly" ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 20057 "parser_cocci_menhir.ml" +# 20032 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20081,9 +20056,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_midzero_list_fun_after_stm_fun_after_dots_or_ = -# 1824 "parser_cocci_menhir.mly" +# 1877 "parser_cocci_menhir.mly" ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 20087 "parser_cocci_menhir.ml" +# 20062 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20111,9 +20086,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_midzero_list_fun_start_fun_start_ = -# 1824 "parser_cocci_menhir.mly" +# 1877 "parser_cocci_menhir.mly" ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 20117 "parser_cocci_menhir.ml" +# 20092 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20141,9 +20116,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_midzero_list_rule_elem_statement_rule_elem_statement_ = -# 1824 "parser_cocci_menhir.mly" +# 1877 "parser_cocci_menhir.mly" ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 20147 "parser_cocci_menhir.ml" +# 20122 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20171,9 +20146,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_midzero_list_statement_statement_ = -# 1824 "parser_cocci_menhir.mly" +# 1877 "parser_cocci_menhir.mly" ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 20177 "parser_cocci_menhir.ml" +# 20152 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20201,11 +20176,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_f_ in let _endpos = _endpos_b_ in let _v : 'tv_minus_body = -# 597 "parser_cocci_menhir.mly" +# 604 "parser_cocci_menhir.mly" ( match f@b(*@ew*) with [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty") | code -> Top_level.top_level code ) -# 20209 "parser_cocci_menhir.ml" +# 20184 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20233,11 +20208,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_f_ in let _endpos = _endpos_b_ in let _v : 'tv_minus_exp_body = -# 611 "parser_cocci_menhir.mly" +# 618 "parser_cocci_menhir.mly" ( match f@[b](*@ew*) with [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty") | code -> Top_level.top_level code ) -# 20241 "parser_cocci_menhir.ml" +# 20216 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20265,11 +20240,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 137 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 20269 "parser_cocci_menhir.ml" +# 20244 "parser_cocci_menhir.ml" ) = # 177 "parser_cocci_menhir.mly" ( _1 ) -# 20273 "parser_cocci_menhir.ml" +# 20248 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20297,11 +20272,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 137 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 20301 "parser_cocci_menhir.ml" +# 20276 "parser_cocci_menhir.ml" ) = # 177 "parser_cocci_menhir.mly" ( m ) -# 20305 "parser_cocci_menhir.ml" +# 20280 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20329,11 +20304,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 137 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 20333 "parser_cocci_menhir.ml" +# 20308 "parser_cocci_menhir.ml" ) = # 178 "parser_cocci_menhir.mly" ( m ) -# 20337 "parser_cocci_menhir.ml" +# 20312 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20361,11 +20336,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 134 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 20365 "parser_cocci_menhir.ml" +# 20340 "parser_cocci_menhir.ml" ) = # 173 "parser_cocci_menhir.mly" ( _1 ) -# 20369 "parser_cocci_menhir.ml" +# 20344 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20393,11 +20368,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 134 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 20397 "parser_cocci_menhir.ml" +# 20372 "parser_cocci_menhir.ml" ) = # 173 "parser_cocci_menhir.mly" ( m ) -# 20401 "parser_cocci_menhir.ml" +# 20376 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20425,11 +20400,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 134 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 20429 "parser_cocci_menhir.ml" +# 20404 "parser_cocci_menhir.ml" ) = # 174 "parser_cocci_menhir.mly" ( m ) -# 20433 "parser_cocci_menhir.ml" +# 20408 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20451,9 +20426,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_minus_start = -# 1633 "parser_cocci_menhir.mly" +# 1686 "parser_cocci_menhir.mly" ( [Ast0.wrap(Ast0.DECL(_1))] ) -# 20457 "parser_cocci_menhir.ml" +# 20432 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20475,9 +20450,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_minus_start = -# 1634 "parser_cocci_menhir.mly" +# 1687 "parser_cocci_menhir.mly" ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] ) -# 20481 "parser_cocci_menhir.ml" +# 20456 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20499,9 +20474,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_minus_start = -# 1635 "parser_cocci_menhir.mly" +# 1688 "parser_cocci_menhir.mly" ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] ) -# 20505 "parser_cocci_menhir.ml" +# 20480 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20523,9 +20498,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_minus_start = -# 1637 "parser_cocci_menhir.mly" +# 1690 "parser_cocci_menhir.mly" ( List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1 ) -# 20529 "parser_cocci_menhir.ml" +# 20504 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20552,14 +20527,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let a : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 20556 "parser_cocci_menhir.ml" +# 20531 "parser_cocci_menhir.ml" ) = Obj.magic a in let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_mzl_ctype_ = -# 1827 "parser_cocci_menhir.mly" +# 1880 "parser_cocci_menhir.mly" ( (P.clt2mcode "|" a, b) ) -# 20563 "parser_cocci_menhir.ml" +# 20538 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20586,14 +20561,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let a : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 20590 "parser_cocci_menhir.ml" +# 20565 "parser_cocci_menhir.ml" ) = Obj.magic a in let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_mzl_eexpr_ = -# 1827 "parser_cocci_menhir.mly" +# 1880 "parser_cocci_menhir.mly" ( (P.clt2mcode "|" a, b) ) -# 20597 "parser_cocci_menhir.ml" +# 20572 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20620,14 +20595,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let a : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 20624 "parser_cocci_menhir.ml" +# 20599 "parser_cocci_menhir.ml" ) = Obj.magic a in let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_mzl_fun_after_dots_or_ = -# 1827 "parser_cocci_menhir.mly" +# 1880 "parser_cocci_menhir.mly" ( (P.clt2mcode "|" a, b) ) -# 20631 "parser_cocci_menhir.ml" +# 20606 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20654,14 +20629,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let a : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 20658 "parser_cocci_menhir.ml" +# 20633 "parser_cocci_menhir.ml" ) = Obj.magic a in let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_mzl_fun_start_ = -# 1827 "parser_cocci_menhir.mly" +# 1880 "parser_cocci_menhir.mly" ( (P.clt2mcode "|" a, b) ) -# 20665 "parser_cocci_menhir.ml" +# 20640 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20688,14 +20663,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let a : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 20692 "parser_cocci_menhir.ml" +# 20667 "parser_cocci_menhir.ml" ) = Obj.magic a in let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_mzl_rule_elem_statement_ = -# 1827 "parser_cocci_menhir.mly" +# 1880 "parser_cocci_menhir.mly" ( (P.clt2mcode "|" a, b) ) -# 20699 "parser_cocci_menhir.ml" +# 20674 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20722,14 +20697,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let a : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 20726 "parser_cocci_menhir.ml" +# 20701 "parser_cocci_menhir.ml" ) = Obj.magic a in let _startpos = _startpos_a_ in let _endpos = _endpos_b_ in let _v : 'tv_mzl_statement_ = -# 1827 "parser_cocci_menhir.mly" +# 1880 "parser_cocci_menhir.mly" ( (P.clt2mcode "|" a, b) ) -# 20733 "parser_cocci_menhir.ml" +# 20708 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20751,9 +20726,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_name_opt_decl = -# 818 "parser_cocci_menhir.mly" +# 825 "parser_cocci_menhir.mly" ( _1 ) -# 20757 "parser_cocci_menhir.ml" +# 20732 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20804,41 +20779,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp1 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 20808 "parser_cocci_menhir.ml" +# 20783 "parser_cocci_menhir.ml" ) = Obj.magic rp1 in let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in let lp1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 20814 "parser_cocci_menhir.ml" +# 20789 "parser_cocci_menhir.ml" ) = Obj.magic lp1 in let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 20819 "parser_cocci_menhir.ml" +# 20794 "parser_cocci_menhir.ml" ) = Obj.magic rp in let s : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 20824 "parser_cocci_menhir.ml" +# 20799 "parser_cocci_menhir.ml" ) = Obj.magic s in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 20829 "parser_cocci_menhir.ml" +# 20804 "parser_cocci_menhir.ml" ) = Obj.magic lp in let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos_t_ in let _endpos = _endpos_rp1_ in let _v : 'tv_name_opt_decl = -# 821 "parser_cocci_menhir.mly" +# 828 "parser_cocci_menhir.mly" ( let fnptr = Ast0.wrap (Ast0.FunctionPointer (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp, P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in Ast0.wrap(Ast0.Param(fnptr, None)) ) -# 20842 "parser_cocci_menhir.ml" +# 20817 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20866,9 +20841,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_nest_after_dots = -# 1748 "parser_cocci_menhir.mly" +# 1801 "parser_cocci_menhir.mly" (_1@_2) -# 20872 "parser_cocci_menhir.ml" +# 20847 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20894,9 +20869,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_nest_after_dots = -# 1749 "parser_cocci_menhir.mly" +# 1802 "parser_cocci_menhir.mly" (_2) -# 20900 "parser_cocci_menhir.ml" +# 20875 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20924,9 +20899,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_nest_after_dots = -# 1750 "parser_cocci_menhir.mly" +# 1803 "parser_cocci_menhir.mly" ((Ast0.wrap(Ast0.Exp(_1)))::_2) -# 20930 "parser_cocci_menhir.ml" +# 20905 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20941,9 +20916,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_nest_after_exp = -# 1758 "parser_cocci_menhir.mly" +# 1811 "parser_cocci_menhir.mly" ([]) -# 20947 "parser_cocci_menhir.ml" +# 20922 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20971,9 +20946,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_nest_after_exp = -# 1759 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" (_1::_2) -# 20977 "parser_cocci_menhir.ml" +# 20952 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20988,9 +20963,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_nest_after_stm = -# 1753 "parser_cocci_menhir.mly" +# 1806 "parser_cocci_menhir.mly" ([]) -# 20994 "parser_cocci_menhir.ml" +# 20969 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21018,9 +20993,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_nest_after_stm = -# 1754 "parser_cocci_menhir.mly" +# 1807 "parser_cocci_menhir.mly" (_1::_2) -# 21024 "parser_cocci_menhir.ml" +# 20999 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21048,9 +21023,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_nest_after_stm = -# 1755 "parser_cocci_menhir.mly" +# 1808 "parser_cocci_menhir.mly" (_1@_2) -# 21054 "parser_cocci_menhir.ml" +# 21029 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21081,22 +21056,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 21085 "parser_cocci_menhir.ml" +# 21060 "parser_cocci_menhir.ml" ) = Obj.magic c in let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in let _1 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 21091 "parser_cocci_menhir.ml" +# 21066 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos_c_ in let _v : 'tv_nest_expressions = -# 1207 "parser_cocci_menhir.mly" +# 1214 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<..." _1, Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), P.clt2mcode "...>" c, None, false)) ) -# 21100 "parser_cocci_menhir.ml" +# 21075 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21127,22 +21102,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 21131 "parser_cocci_menhir.ml" +# 21106 "parser_cocci_menhir.ml" ) = Obj.magic c in let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in let _1 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 21137 "parser_cocci_menhir.ml" +# 21112 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos_c_ in let _v : 'tv_nest_expressions = -# 1211 "parser_cocci_menhir.mly" +# 1218 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<+..." _1, Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), P.clt2mcode "...+>" c, None, true)) ) -# 21146 "parser_cocci_menhir.ml" +# 21121 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21164,9 +21139,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_nest_start = -# 1745 "parser_cocci_menhir.mly" +# 1798 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS(_1)) ) -# 21170 "parser_cocci_menhir.ml" +# 21145 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21188,11 +21163,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 168 "parser_cocci_menhir.mly" (unit) -# 21192 "parser_cocci_menhir.ml" +# 21167 "parser_cocci_menhir.ml" ) = -# 1890 "parser_cocci_menhir.mly" +# 1943 "parser_cocci_menhir.mly" ( () ) -# 21196 "parser_cocci_menhir.ml" +# 21171 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21218,11 +21193,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 168 "parser_cocci_menhir.mly" (unit) -# 21222 "parser_cocci_menhir.ml" +# 21197 "parser_cocci_menhir.ml" ) = -# 1891 "parser_cocci_menhir.mly" +# 1944 "parser_cocci_menhir.mly" ( () ) -# 21226 "parser_cocci_menhir.ml" +# 21201 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21244,11 +21219,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 168 "parser_cocci_menhir.mly" (unit) -# 21248 "parser_cocci_menhir.ml" +# 21223 "parser_cocci_menhir.ml" ) = -# 1892 "parser_cocci_menhir.mly" +# 1945 "parser_cocci_menhir.mly" ( () ) -# 21252 "parser_cocci_menhir.ml" +# 21227 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21276,10 +21251,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_g_ in let _endpos = _endpos_dg_ in let _v : 'tv_no_dot_start_end_dexpr_edots_when_TEllipsis_eexpr__ = -# 1375 "parser_cocci_menhir.mly" +# 1382 "parser_cocci_menhir.mly" ( function dot_builder -> g :: (List.concat(List.map (function (d,g) -> [dot_builder d;g]) dg)) ) -# 21283 "parser_cocci_menhir.ml" +# 21258 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21300,14 +21275,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let x : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 21304 "parser_cocci_menhir.ml" +# 21279 "parser_cocci_menhir.ml" ) = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : 'tv_nonempty_list_TMul_ = # 124 "standard.mly" ( [ x ] ) -# 21311 "parser_cocci_menhir.ml" +# 21286 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21334,14 +21309,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let x : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 21338 "parser_cocci_menhir.ml" +# 21313 "parser_cocci_menhir.ml" ) = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in let _v : 'tv_nonempty_list_TMul_ = # 126 "standard.mly" ( x :: xs ) -# 21345 "parser_cocci_menhir.ml" +# 21320 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21367,13 +21342,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_i_ in let _v : 'tv_not_ceq = -# 1466 "parser_cocci_menhir.mly" +# 1519 "parser_cocci_menhir.mly" ( (if !Data.in_iso then failwith "constraints not allowed in iso file"); (if !Data.in_generating then failwith "constraints not allowed in a generated rule file"); [i] ) -# 21377 "parser_cocci_menhir.ml" +# 21352 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21407,13 +21382,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_not_ceq = -# 1472 "parser_cocci_menhir.mly" +# 1525 "parser_cocci_menhir.mly" ( (if !Data.in_iso then failwith "constraints not allowed in iso file"); (if !Data.in_generating then failwith "constraints not allowed in a generated rule file"); l ) -# 21417 "parser_cocci_menhir.ml" +# 21392 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21438,16 +21413,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let i : 'tv_pure_ident = Obj.magic i in let _startpos = _startpos__1_ in let _endpos = _endpos_i_ in - let _v : 'tv_not_eq = -# 1433 "parser_cocci_menhir.mly" + let _v : 'tv_not_eqe = +# 1500 "parser_cocci_menhir.mly" ( (if !Data.in_iso then failwith "constraints not allowed in iso file"); (if !Data.in_generating - (* pb: constraints not stored with metavars; too lazy to search for - them in the pattern *) then failwith "constraints not allowed in a generated rule file"); - [Ast0.wrap(Ast0.Id(P.id2mcode i))] ) -# 21451 "parser_cocci_menhir.ml" + [Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))] + ) +# 21425 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21480,14 +21454,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let l : 'tv_comma_list_pure_ident_ = Obj.magic l in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : 'tv_not_eq = -# 1441 "parser_cocci_menhir.mly" + let _v : 'tv_not_eqe = +# 1507 "parser_cocci_menhir.mly" ( (if !Data.in_iso then failwith "constraints not allowed in iso file"); (if !Data.in_generating then failwith "constraints not allowed in a generated rule file"); - List.map (function i -> Ast0.wrap(Ast0.Id(P.id2mcode i))) l ) -# 21491 "parser_cocci_menhir.ml" + List.map + (function i -> + Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))) + l + ) +# 21469 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21512,14 +21490,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let i : 'tv_pure_ident = Obj.magic i in let _startpos = _startpos__1_ in let _endpos = _endpos_i_ in - let _v : 'tv_not_eqe = -# 1449 "parser_cocci_menhir.mly" + let _v : 'tv_not_eqid = +# 1479 "parser_cocci_menhir.mly" ( (if !Data.in_iso then failwith "constraints not allowed in iso file"); (if !Data.in_generating + (* pb: constraints not stored with metavars; too lazy to search for + them in the pattern *) then failwith "constraints not allowed in a generated rule file"); - [Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))] ) -# 21523 "parser_cocci_menhir.ml" + Ast.IdNegIdSet([fst i]) ) +# 21503 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21552,17 +21532,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let l : 'tv_comma_list_pure_ident_ = Obj.magic l in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : 'tv_not_eqe = -# 1455 "parser_cocci_menhir.mly" + let _v : 'tv_not_eqid = +# 1487 "parser_cocci_menhir.mly" ( (if !Data.in_iso then failwith "constraints not allowed in iso file"); (if !Data.in_generating then failwith "constraints not allowed in a generated rule file"); - List.map - (function i -> - Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))) - l ) -# 21566 "parser_cocci_menhir.ml" + Ast.IdNegIdSet(List.map fst l) + ) +# 21544 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21588,7 +21566,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos_i_ in let _v : 'tv_not_pos = -# 1486 "parser_cocci_menhir.mly" +# 1539 "parser_cocci_menhir.mly" ( (if !Data.in_iso then failwith "constraints not allowed in iso file"); (if !Data.in_generating @@ -21599,7 +21577,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let i = (rule,name) in P.check_meta(Ast.MetaPosDecl(Ast.NONE,i)); [i] ) -# 21603 "parser_cocci_menhir.ml" +# 21581 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21633,7 +21611,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_not_pos = -# 1497 "parser_cocci_menhir.mly" +# 1550 "parser_cocci_menhir.mly" ( (if !Data.in_iso then failwith "constraints not allowed in iso file"); (if !Data.in_generating @@ -21647,7 +21625,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct P.check_meta(Ast.MetaPosDecl(Ast.NONE,i)); i) l ) -# 21651 "parser_cocci_menhir.ml" +# 21629 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21669,9 +21647,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_one_dec_decl_ = -# 1571 "parser_cocci_menhir.mly" +# 1624 "parser_cocci_menhir.mly" ( _1 ) -# 21675 "parser_cocci_menhir.ml" +# 21653 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21692,12 +21670,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 66 "parser_cocci_menhir.mly" (Parse_aux.list_info) -# 21696 "parser_cocci_menhir.ml" +# 21674 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_one_dec_decl_ = -# 1573 "parser_cocci_menhir.mly" +# 1626 "parser_cocci_menhir.mly" ( let (nm,lenname,pure,clt) = _1 in let nm = P.clt2mcode nm clt in let lenname = @@ -21705,7 +21683,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Some nm -> Some(P.clt2mcode nm clt) | None -> None in Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) ) -# 21709 "parser_cocci_menhir.ml" +# 21687 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21727,9 +21705,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_one_dec_name_opt_decl_ = -# 1571 "parser_cocci_menhir.mly" +# 1624 "parser_cocci_menhir.mly" ( _1 ) -# 21733 "parser_cocci_menhir.ml" +# 21711 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21750,12 +21728,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 66 "parser_cocci_menhir.mly" (Parse_aux.list_info) -# 21754 "parser_cocci_menhir.ml" +# 21732 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_one_dec_name_opt_decl_ = -# 1573 "parser_cocci_menhir.mly" +# 1626 "parser_cocci_menhir.mly" ( let (nm,lenname,pure,clt) = _1 in let nm = P.clt2mcode nm clt in let lenname = @@ -21763,7 +21741,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Some nm -> Some(P.clt2mcode nm clt) | None -> None in Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) ) -# 21767 "parser_cocci_menhir.ml" +# 21745 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21789,15 +21767,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 21793 "parser_cocci_menhir.ml" +# 21771 "parser_cocci_menhir.ml" ) = Obj.magic pv in let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos_t_ in let _endpos = _endpos_pv_ in let _v : 'tv_one_decl_var = -# 996 "parser_cocci_menhir.mly" +# 1003 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv)) ) -# 21801 "parser_cocci_menhir.ml" +# 21779 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21828,7 +21806,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 21832 "parser_cocci_menhir.ml" +# 21810 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_d_ident = Obj.magic d in let t : 'tv_ctype = Obj.magic t in @@ -21838,14 +21816,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 21842 "parser_cocci_menhir.ml" +# 21820 "parser_cocci_menhir.ml" in -# 998 "parser_cocci_menhir.mly" +# 1005 "parser_cocci_menhir.mly" ( let (id,fn) = d in Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) -# 21849 "parser_cocci_menhir.ml" +# 21827 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21881,7 +21859,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 21885 "parser_cocci_menhir.ml" +# 21863 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_d_ident = Obj.magic d in let t : 'tv_ctype = Obj.magic t in @@ -21893,14 +21871,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 21897 "parser_cocci_menhir.ml" +# 21875 "parser_cocci_menhir.ml" in -# 998 "parser_cocci_menhir.mly" +# 1005 "parser_cocci_menhir.mly" ( let (id,fn) = d in Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) -# 21904 "parser_cocci_menhir.ml" +# 21882 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21922,9 +21900,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_f_ in let _endpos = _endpos_f_ in let _v : 'tv_one_decl_var = -# 1000 "parser_cocci_menhir.mly" +# 1007 "parser_cocci_menhir.mly" ( f ) -# 21928 "parser_cocci_menhir.ml" +# 21906 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21965,13 +21943,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 21969 "parser_cocci_menhir.ml" +# 21947 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 21975 "parser_cocci_menhir.ml" +# 21953 "parser_cocci_menhir.ml" ) = Obj.magic q in let d : 'tv_d_ident = Obj.magic d in let t : 'tv_ctype = Obj.magic t in @@ -21981,14 +21959,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 21985 "parser_cocci_menhir.ml" +# 21963 "parser_cocci_menhir.ml" in -# 1002 "parser_cocci_menhir.mly" +# 1009 "parser_cocci_menhir.mly" ( let (id,fn) = d in Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) ) -# 21992 "parser_cocci_menhir.ml" +# 21970 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22034,13 +22012,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22038 "parser_cocci_menhir.ml" +# 22016 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22044 "parser_cocci_menhir.ml" +# 22022 "parser_cocci_menhir.ml" ) = Obj.magic q in let d : 'tv_d_ident = Obj.magic d in let t : 'tv_ctype = Obj.magic t in @@ -22052,14 +22030,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 22056 "parser_cocci_menhir.ml" +# 22034 "parser_cocci_menhir.ml" in -# 1002 "parser_cocci_menhir.mly" +# 1009 "parser_cocci_menhir.mly" ( let (id,fn) = d in Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) ) -# 22063 "parser_cocci_menhir.ml" +# 22041 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22090,7 +22068,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22094 "parser_cocci_menhir.ml" +# 22072 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -22100,22 +22078,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 22104 "parser_cocci_menhir.ml" +# 22082 "parser_cocci_menhir.ml" in let s = # 39 "standard.mly" ( None ) -# 22111 "parser_cocci_menhir.ml" +# 22089 "parser_cocci_menhir.ml" in -# 1007 "parser_cocci_menhir.mly" +# 1014 "parser_cocci_menhir.mly" ( let (id,fn) = d in let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) ) -# 22119 "parser_cocci_menhir.ml" +# 22097 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22151,7 +22129,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22155 "parser_cocci_menhir.ml" +# 22133 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -22163,22 +22141,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 22167 "parser_cocci_menhir.ml" +# 22145 "parser_cocci_menhir.ml" in let s = # 39 "standard.mly" ( None ) -# 22174 "parser_cocci_menhir.ml" +# 22152 "parser_cocci_menhir.ml" in -# 1007 "parser_cocci_menhir.mly" +# 1014 "parser_cocci_menhir.mly" ( let (id,fn) = d in let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) ) -# 22182 "parser_cocci_menhir.ml" +# 22160 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22214,7 +22192,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22218 "parser_cocci_menhir.ml" +# 22196 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -22225,7 +22203,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 22229 "parser_cocci_menhir.ml" +# 22207 "parser_cocci_menhir.ml" in let s = @@ -22233,15 +22211,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 22237 "parser_cocci_menhir.ml" +# 22215 "parser_cocci_menhir.ml" in -# 1007 "parser_cocci_menhir.mly" +# 1014 "parser_cocci_menhir.mly" ( let (id,fn) = d in let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) ) -# 22245 "parser_cocci_menhir.ml" +# 22223 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22282,7 +22260,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22286 "parser_cocci_menhir.ml" +# 22264 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -22295,7 +22273,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 22299 "parser_cocci_menhir.ml" +# 22277 "parser_cocci_menhir.ml" in let s = @@ -22303,15 +22281,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 22307 "parser_cocci_menhir.ml" +# 22285 "parser_cocci_menhir.ml" in -# 1007 "parser_cocci_menhir.mly" +# 1014 "parser_cocci_menhir.mly" ( let (id,fn) = d in let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) ) -# 22315 "parser_cocci_menhir.ml" +# 22293 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22352,13 +22330,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22356 "parser_cocci_menhir.ml" +# 22334 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22362 "parser_cocci_menhir.ml" +# 22340 "parser_cocci_menhir.ml" ) = Obj.magic q in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -22368,24 +22346,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 22372 "parser_cocci_menhir.ml" +# 22350 "parser_cocci_menhir.ml" in let s = # 39 "standard.mly" ( None ) -# 22379 "parser_cocci_menhir.ml" +# 22357 "parser_cocci_menhir.ml" in -# 1012 "parser_cocci_menhir.mly" +# 1019 "parser_cocci_menhir.mly" ( let (id,fn) = d in !Data.add_type_name (P.id2name i); let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, P.clt2mcode ";" pv)) ) -# 22389 "parser_cocci_menhir.ml" +# 22367 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22431,13 +22409,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22435 "parser_cocci_menhir.ml" +# 22413 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22441 "parser_cocci_menhir.ml" +# 22419 "parser_cocci_menhir.ml" ) = Obj.magic q in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -22449,24 +22427,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 22453 "parser_cocci_menhir.ml" +# 22431 "parser_cocci_menhir.ml" in let s = # 39 "standard.mly" ( None ) -# 22460 "parser_cocci_menhir.ml" +# 22438 "parser_cocci_menhir.ml" in -# 1012 "parser_cocci_menhir.mly" +# 1019 "parser_cocci_menhir.mly" ( let (id,fn) = d in !Data.add_type_name (P.id2name i); let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, P.clt2mcode ";" pv)) ) -# 22470 "parser_cocci_menhir.ml" +# 22448 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22512,13 +22490,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22516 "parser_cocci_menhir.ml" +# 22494 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22522 "parser_cocci_menhir.ml" +# 22500 "parser_cocci_menhir.ml" ) = Obj.magic q in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -22529,7 +22507,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 22533 "parser_cocci_menhir.ml" +# 22511 "parser_cocci_menhir.ml" in let s = @@ -22537,17 +22515,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 22541 "parser_cocci_menhir.ml" +# 22519 "parser_cocci_menhir.ml" in -# 1012 "parser_cocci_menhir.mly" +# 1019 "parser_cocci_menhir.mly" ( let (id,fn) = d in !Data.add_type_name (P.id2name i); let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, P.clt2mcode ";" pv)) ) -# 22551 "parser_cocci_menhir.ml" +# 22529 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22598,13 +22576,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22602 "parser_cocci_menhir.ml" +# 22580 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22608 "parser_cocci_menhir.ml" +# 22586 "parser_cocci_menhir.ml" ) = Obj.magic q in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -22617,7 +22595,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 22621 "parser_cocci_menhir.ml" +# 22599 "parser_cocci_menhir.ml" in let s = @@ -22625,17 +22603,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 22629 "parser_cocci_menhir.ml" +# 22607 "parser_cocci_menhir.ml" in -# 1012 "parser_cocci_menhir.mly" +# 1019 "parser_cocci_menhir.mly" ( let (id,fn) = d in !Data.add_type_name (P.id2name i); let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, P.clt2mcode ";" pv)) ) -# 22639 "parser_cocci_menhir.ml" +# 22617 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22696,34 +22674,34 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22700 "parser_cocci_menhir.ml" +# 22678 "parser_cocci_menhir.ml" ) = Obj.magic pv in let rp2 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 22705 "parser_cocci_menhir.ml" +# 22683 "parser_cocci_menhir.ml" ) = Obj.magic rp2 in let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in let lp2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 22711 "parser_cocci_menhir.ml" +# 22689 "parser_cocci_menhir.ml" ) = Obj.magic lp2 in let rp1 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 22716 "parser_cocci_menhir.ml" +# 22694 "parser_cocci_menhir.ml" ) = Obj.magic rp1 in let d : 'tv_d_ident = Obj.magic d in let st : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 22722 "parser_cocci_menhir.ml" +# 22700 "parser_cocci_menhir.ml" ) = Obj.magic st in let lp1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 22727 "parser_cocci_menhir.ml" +# 22705 "parser_cocci_menhir.ml" ) = Obj.magic lp1 in let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos_t_ in @@ -22732,11 +22710,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 22736 "parser_cocci_menhir.ml" +# 22714 "parser_cocci_menhir.ml" in -# 1022 "parser_cocci_menhir.mly" +# 1029 "parser_cocci_menhir.mly" ( let (id,fn) = d in let t = Ast0.wrap @@ -22744,7 +22722,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) -# 22748 "parser_cocci_menhir.ml" +# 22726 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22810,34 +22788,34 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22814 "parser_cocci_menhir.ml" +# 22792 "parser_cocci_menhir.ml" ) = Obj.magic pv in let rp2 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 22819 "parser_cocci_menhir.ml" +# 22797 "parser_cocci_menhir.ml" ) = Obj.magic rp2 in let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in let lp2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 22825 "parser_cocci_menhir.ml" +# 22803 "parser_cocci_menhir.ml" ) = Obj.magic lp2 in let rp1 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 22830 "parser_cocci_menhir.ml" +# 22808 "parser_cocci_menhir.ml" ) = Obj.magic rp1 in let d : 'tv_d_ident = Obj.magic d in let st : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 22836 "parser_cocci_menhir.ml" +# 22814 "parser_cocci_menhir.ml" ) = Obj.magic st in let lp1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 22841 "parser_cocci_menhir.ml" +# 22819 "parser_cocci_menhir.ml" ) = Obj.magic lp1 in let t : 'tv_ctype = Obj.magic t in let x0 : 'tv_storage = Obj.magic x0 in @@ -22848,11 +22826,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 22852 "parser_cocci_menhir.ml" +# 22830 "parser_cocci_menhir.ml" in -# 1022 "parser_cocci_menhir.mly" +# 1029 "parser_cocci_menhir.mly" ( let (id,fn) = d in let t = Ast0.wrap @@ -22860,7 +22838,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) -# 22864 "parser_cocci_menhir.ml" +# 22842 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22901,27 +22879,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _5 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22905 "parser_cocci_menhir.ml" +# 22883 "parser_cocci_menhir.ml" ) = Obj.magic _5 in let _4 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 22910 "parser_cocci_menhir.ml" +# 22888 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr_list_option = Obj.magic _3 in let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 22916 "parser_cocci_menhir.ml" +# 22894 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_decl_ident = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : 'tv_one_decl_var = -# 1030 "parser_cocci_menhir.mly" +# 1037 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3, P.clt2mcode ")" _4,P.clt2mcode ";" _5)) ) -# 22925 "parser_cocci_menhir.ml" +# 22903 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22992,40 +22970,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 22996 "parser_cocci_menhir.ml" +# 22974 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 23002 "parser_cocci_menhir.ml" +# 22980 "parser_cocci_menhir.ml" ) = Obj.magic q in let rp2 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 23007 "parser_cocci_menhir.ml" +# 22985 "parser_cocci_menhir.ml" ) = Obj.magic rp2 in let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in let lp2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 23013 "parser_cocci_menhir.ml" +# 22991 "parser_cocci_menhir.ml" ) = Obj.magic lp2 in let rp1 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 23018 "parser_cocci_menhir.ml" +# 22996 "parser_cocci_menhir.ml" ) = Obj.magic rp1 in let d : 'tv_d_ident = Obj.magic d in let st : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 23024 "parser_cocci_menhir.ml" +# 23002 "parser_cocci_menhir.ml" ) = Obj.magic st in let lp1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 23029 "parser_cocci_menhir.ml" +# 23007 "parser_cocci_menhir.ml" ) = Obj.magic lp1 in let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos_t_ in @@ -23034,11 +23012,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 23038 "parser_cocci_menhir.ml" +# 23016 "parser_cocci_menhir.ml" in -# 1036 "parser_cocci_menhir.mly" +# 1043 "parser_cocci_menhir.mly" ( let (id,fn) = d in let t = Ast0.wrap @@ -23046,7 +23024,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))) -# 23050 "parser_cocci_menhir.ml" +# 23028 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23122,40 +23100,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 23126 "parser_cocci_menhir.ml" +# 23104 "parser_cocci_menhir.ml" ) = Obj.magic pv in let e : 'tv_initialize = Obj.magic e in let q : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 23132 "parser_cocci_menhir.ml" +# 23110 "parser_cocci_menhir.ml" ) = Obj.magic q in let rp2 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 23137 "parser_cocci_menhir.ml" +# 23115 "parser_cocci_menhir.ml" ) = Obj.magic rp2 in let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in let lp2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 23143 "parser_cocci_menhir.ml" +# 23121 "parser_cocci_menhir.ml" ) = Obj.magic lp2 in let rp1 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 23148 "parser_cocci_menhir.ml" +# 23126 "parser_cocci_menhir.ml" ) = Obj.magic rp1 in let d : 'tv_d_ident = Obj.magic d in let st : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 23154 "parser_cocci_menhir.ml" +# 23132 "parser_cocci_menhir.ml" ) = Obj.magic st in let lp1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 23159 "parser_cocci_menhir.ml" +# 23137 "parser_cocci_menhir.ml" ) = Obj.magic lp1 in let t : 'tv_ctype = Obj.magic t in let x0 : 'tv_storage = Obj.magic x0 in @@ -23166,11 +23144,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 23170 "parser_cocci_menhir.ml" +# 23148 "parser_cocci_menhir.ml" in -# 1036 "parser_cocci_menhir.mly" +# 1043 "parser_cocci_menhir.mly" ( let (id,fn) = d in let t = Ast0.wrap @@ -23178,7 +23156,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))) -# 23182 "parser_cocci_menhir.ml" +# 23160 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23195,7 +23173,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_option_TLocal_ = # 29 "standard.mly" ( None ) -# 23199 "parser_cocci_menhir.ml" +# 23177 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23219,7 +23197,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_option_TLocal_ = # 31 "standard.mly" ( Some x ) -# 23223 "parser_cocci_menhir.ml" +# 23201 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23236,7 +23214,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_option_TPosAny_ = # 29 "standard.mly" ( None ) -# 23240 "parser_cocci_menhir.ml" +# 23218 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23260,7 +23238,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_option_TPosAny_ = # 31 "standard.mly" ( Some x ) -# 23264 "parser_cocci_menhir.ml" +# 23242 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23277,7 +23255,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_option_eexpr_ = # 29 "standard.mly" ( None ) -# 23281 "parser_cocci_menhir.ml" +# 23259 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23301,7 +23279,89 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_option_eexpr_ = # 31 "standard.mly" ( Some x ) -# 23305 "parser_cocci_menhir.ml" +# 23283 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_option_re_or_not_eqe_ = +# 29 "standard.mly" + ( None ) +# 23300 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let x : 'tv_re_or_not_eqe = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_option_re_or_not_eqe_ = +# 31 "standard.mly" + ( Some x ) +# 23324 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_option_re_or_not_eqid_ = +# 29 "standard.mly" + ( None ) +# 23341 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let x : 'tv_re_or_not_eqid = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_option_re_or_not_eqid_ = +# 31 "standard.mly" + ( Some x ) +# 23365 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23316,9 +23376,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_plus_after_dots = -# 1695 "parser_cocci_menhir.mly" +# 1748 "parser_cocci_menhir.mly" ([]) -# 23322 "parser_cocci_menhir.ml" +# 23382 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23344,9 +23404,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_plus_after_dots = -# 1696 "parser_cocci_menhir.mly" +# 1749 "parser_cocci_menhir.mly" (_2) -# 23350 "parser_cocci_menhir.ml" +# 23410 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23374,9 +23434,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_plus_after_dots = -# 1698 "parser_cocci_menhir.mly" +# 1751 "parser_cocci_menhir.mly" ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 ) -# 23380 "parser_cocci_menhir.ml" +# 23440 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23404,9 +23464,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_plus_after_dots = -# 1699 "parser_cocci_menhir.mly" +# 1752 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DECL(_1))::_2 ) -# 23410 "parser_cocci_menhir.ml" +# 23470 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23434,9 +23494,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_plus_after_dots = -# 1701 "parser_cocci_menhir.mly" +# 1754 "parser_cocci_menhir.mly" ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) -# 23440 "parser_cocci_menhir.ml" +# 23500 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23451,9 +23511,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_plus_after_exp = -# 1691 "parser_cocci_menhir.mly" +# 1744 "parser_cocci_menhir.mly" ([]) -# 23457 "parser_cocci_menhir.ml" +# 23517 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23481,9 +23541,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_plus_after_exp = -# 1692 "parser_cocci_menhir.mly" +# 1745 "parser_cocci_menhir.mly" ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) -# 23487 "parser_cocci_menhir.ml" +# 23547 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23498,9 +23558,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_plus_after_stm = -# 1704 "parser_cocci_menhir.mly" +# 1757 "parser_cocci_menhir.mly" ([]) -# 23504 "parser_cocci_menhir.ml" +# 23564 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23528,9 +23588,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_plus_after_stm = -# 1705 "parser_cocci_menhir.mly" +# 1758 "parser_cocci_menhir.mly" ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) -# 23534 "parser_cocci_menhir.ml" +# 23594 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23558,9 +23618,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_plus_after_stm = -# 1706 "parser_cocci_menhir.mly" +# 1759 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DECL(_1))::_2 ) -# 23564 "parser_cocci_menhir.ml" +# 23624 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23588,9 +23648,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_plus_after_stm = -# 1708 "parser_cocci_menhir.mly" +# 1761 "parser_cocci_menhir.mly" ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) -# 23594 "parser_cocci_menhir.ml" +# 23654 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23618,9 +23678,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_f_ in let _endpos = _endpos_b_ in let _v : 'tv_plus_body = -# 605 "parser_cocci_menhir.mly" +# 612 "parser_cocci_menhir.mly" ( Top_level.top_level (f@b(*@ew*)) ) -# 23624 "parser_cocci_menhir.ml" +# 23684 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23648,9 +23708,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_f_ in let _endpos = _endpos_b_ in let _v : 'tv_plus_exp_body = -# 619 "parser_cocci_menhir.mly" +# 626 "parser_cocci_menhir.mly" ( Top_level.top_level (f@[b](*@ew*)) ) -# 23654 "parser_cocci_menhir.ml" +# 23714 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23678,11 +23738,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 143 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 23682 "parser_cocci_menhir.ml" +# 23742 "parser_cocci_menhir.ml" ) = # 179 "parser_cocci_menhir.mly" ( _1 ) -# 23686 "parser_cocci_menhir.ml" +# 23746 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23710,11 +23770,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 143 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 23714 "parser_cocci_menhir.ml" +# 23774 "parser_cocci_menhir.ml" ) = # 179 "parser_cocci_menhir.mly" ( p ) -# 23718 "parser_cocci_menhir.ml" +# 23778 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23742,11 +23802,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 143 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 23746 "parser_cocci_menhir.ml" +# 23806 "parser_cocci_menhir.ml" ) = # 180 "parser_cocci_menhir.mly" ( p ) -# 23750 "parser_cocci_menhir.ml" +# 23810 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23774,11 +23834,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 140 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 23778 "parser_cocci_menhir.ml" +# 23838 "parser_cocci_menhir.ml" ) = # 175 "parser_cocci_menhir.mly" ( _1 ) -# 23782 "parser_cocci_menhir.ml" +# 23842 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23806,11 +23866,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 140 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 23810 "parser_cocci_menhir.ml" +# 23870 "parser_cocci_menhir.ml" ) = # 175 "parser_cocci_menhir.mly" ( p ) -# 23814 "parser_cocci_menhir.ml" +# 23874 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23838,11 +23898,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 140 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 23842 "parser_cocci_menhir.ml" +# 23902 "parser_cocci_menhir.ml" ) = # 176 "parser_cocci_menhir.mly" ( p ) -# 23846 "parser_cocci_menhir.ml" +# 23906 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23864,9 +23924,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_plus_start = -# 1680 "parser_cocci_menhir.mly" +# 1733 "parser_cocci_menhir.mly" ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] ) -# 23870 "parser_cocci_menhir.ml" +# 23930 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23888,9 +23948,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_plus_start = -# 1681 "parser_cocci_menhir.mly" +# 1734 "parser_cocci_menhir.mly" ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] ) -# 23894 "parser_cocci_menhir.ml" +# 23954 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23918,9 +23978,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_plus_start = -# 1683 "parser_cocci_menhir.mly" +# 1736 "parser_cocci_menhir.mly" ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) -# 23924 "parser_cocci_menhir.ml" +# 23984 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23948,9 +24008,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_plus_start = -# 1685 "parser_cocci_menhir.mly" +# 1738 "parser_cocci_menhir.mly" ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 ) -# 23954 "parser_cocci_menhir.ml" +# 24014 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23978,9 +24038,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_plus_start = -# 1686 "parser_cocci_menhir.mly" +# 1739 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DECL(_1))::_2 ) -# 23984 "parser_cocci_menhir.ml" +# 24044 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24008,9 +24068,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_plus_start = -# 1688 "parser_cocci_menhir.mly" +# 1741 "parser_cocci_menhir.mly" ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) -# 24014 "parser_cocci_menhir.ml" +# 24074 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24031,14 +24091,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 47 "parser_cocci_menhir.mly" (string) -# 24035 "parser_cocci_menhir.ml" +# 24095 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pnrule = # 230 "parser_cocci_menhir.mly" ( Ast.Dep _1 ) -# 24042 "parser_cocci_menhir.ml" +# 24102 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24063,14 +24123,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 47 "parser_cocci_menhir.mly" (string) -# 24067 "parser_cocci_menhir.ml" +# 24127 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_pnrule = # 231 "parser_cocci_menhir.mly" ( Ast.AntiDep _2 ) -# 24074 "parser_cocci_menhir.ml" +# 24134 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24095,14 +24155,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 47 "parser_cocci_menhir.mly" (string) -# 24099 "parser_cocci_menhir.ml" +# 24159 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_pnrule = # 232 "parser_cocci_menhir.mly" ( Ast.EverDep _2 ) -# 24106 "parser_cocci_menhir.ml" +# 24166 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24127,14 +24187,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 47 "parser_cocci_menhir.mly" (string) -# 24131 "parser_cocci_menhir.ml" +# 24191 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_pnrule = # 233 "parser_cocci_menhir.mly" ( Ast.NeverDep _2 ) -# 24138 "parser_cocci_menhir.ml" +# 24198 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24166,7 +24226,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_pnrule = # 234 "parser_cocci_menhir.mly" ( _2 ) -# 24170 "parser_cocci_menhir.ml" +# 24230 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24188,9 +24248,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1308 "parser_cocci_menhir.mly" +# 1315 "parser_cocci_menhir.mly" ( _1 ) -# 24194 "parser_cocci_menhir.ml" +# 24254 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24226,22 +24286,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 24230 "parser_cocci_menhir.ml" +# 24290 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr = Obj.magic _3 in let _2 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 24236 "parser_cocci_menhir.ml" +# 24296 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1310 "parser_cocci_menhir.mly" +# 1317 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, P.clt2mcode "]" _4)) ) -# 24245 "parser_cocci_menhir.ml" +# 24305 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24273,15 +24333,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 24277 "parser_cocci_menhir.ml" +# 24337 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1313 "parser_cocci_menhir.mly" +# 1320 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) -# 24285 "parser_cocci_menhir.ml" +# 24345 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24313,16 +24373,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 24317 "parser_cocci_menhir.ml" +# 24377 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1315 "parser_cocci_menhir.mly" +# 1322 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, _3)) ) -# 24326 "parser_cocci_menhir.ml" +# 24386 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24348,15 +24408,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 24352 "parser_cocci_menhir.ml" +# 24412 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1318 "parser_cocci_menhir.mly" +# 1325 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) -# 24360 "parser_cocci_menhir.ml" +# 24420 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24382,15 +24442,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 24386 "parser_cocci_menhir.ml" +# 24446 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1320 "parser_cocci_menhir.mly" +# 1327 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) -# 24394 "parser_cocci_menhir.ml" +# 24454 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24426,23 +24486,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 24430 "parser_cocci_menhir.ml" +# 24490 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr_list_option = Obj.magic _3 in let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 24436 "parser_cocci_menhir.ml" +# 24496 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1322 "parser_cocci_menhir.mly" +# 1329 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, _3, P.clt2mcode ")" _4)) ) -# 24446 "parser_cocci_menhir.ml" +# 24506 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24464,9 +24524,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1308 "parser_cocci_menhir.mly" +# 1315 "parser_cocci_menhir.mly" ( _1 ) -# 24470 "parser_cocci_menhir.ml" +# 24530 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24502,22 +24562,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 24506 "parser_cocci_menhir.ml" +# 24566 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr = Obj.magic _3 in let _2 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 24512 "parser_cocci_menhir.ml" +# 24572 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1310 "parser_cocci_menhir.mly" +# 1317 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, P.clt2mcode "]" _4)) ) -# 24521 "parser_cocci_menhir.ml" +# 24581 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24549,15 +24609,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 24553 "parser_cocci_menhir.ml" +# 24613 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1313 "parser_cocci_menhir.mly" +# 1320 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) -# 24561 "parser_cocci_menhir.ml" +# 24621 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24589,16 +24649,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 24593 "parser_cocci_menhir.ml" +# 24653 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1315 "parser_cocci_menhir.mly" +# 1322 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, _3)) ) -# 24602 "parser_cocci_menhir.ml" +# 24662 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24624,15 +24684,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 24628 "parser_cocci_menhir.ml" +# 24688 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1318 "parser_cocci_menhir.mly" +# 1325 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) -# 24636 "parser_cocci_menhir.ml" +# 24696 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24658,15 +24718,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 24662 "parser_cocci_menhir.ml" +# 24722 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1320 "parser_cocci_menhir.mly" +# 1327 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) -# 24670 "parser_cocci_menhir.ml" +# 24730 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24702,23 +24762,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 24706 "parser_cocci_menhir.ml" +# 24766 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr_list_option = Obj.magic _3 in let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 24712 "parser_cocci_menhir.ml" +# 24772 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1322 "parser_cocci_menhir.mly" +# 1329 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, _3, P.clt2mcode ")" _4)) ) -# 24722 "parser_cocci_menhir.ml" +# 24782 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24740,9 +24800,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1308 "parser_cocci_menhir.mly" +# 1315 "parser_cocci_menhir.mly" ( _1 ) -# 24746 "parser_cocci_menhir.ml" +# 24806 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24778,22 +24838,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 24782 "parser_cocci_menhir.ml" +# 24842 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr = Obj.magic _3 in let _2 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 24788 "parser_cocci_menhir.ml" +# 24848 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1310 "parser_cocci_menhir.mly" +# 1317 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, P.clt2mcode "]" _4)) ) -# 24797 "parser_cocci_menhir.ml" +# 24857 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24825,15 +24885,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 24829 "parser_cocci_menhir.ml" +# 24889 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1313 "parser_cocci_menhir.mly" +# 1320 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) -# 24837 "parser_cocci_menhir.ml" +# 24897 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24865,16 +24925,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 24869 "parser_cocci_menhir.ml" +# 24929 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1315 "parser_cocci_menhir.mly" +# 1322 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, _3)) ) -# 24878 "parser_cocci_menhir.ml" +# 24938 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24900,15 +24960,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 24904 "parser_cocci_menhir.ml" +# 24964 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1318 "parser_cocci_menhir.mly" +# 1325 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) -# 24912 "parser_cocci_menhir.ml" +# 24972 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24934,15 +24994,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 24938 "parser_cocci_menhir.ml" +# 24998 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1320 "parser_cocci_menhir.mly" +# 1327 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) -# 24946 "parser_cocci_menhir.ml" +# 25006 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24978,23 +25038,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 24982 "parser_cocci_menhir.ml" +# 25042 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr_list_option = Obj.magic _3 in let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 24988 "parser_cocci_menhir.ml" +# 25048 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1322 "parser_cocci_menhir.mly" +# 1329 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, _3, P.clt2mcode ")" _4)) ) -# 24998 "parser_cocci_menhir.ml" +# 25058 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25016,9 +25076,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_postfix_expr_expr_invalid_ = -# 1308 "parser_cocci_menhir.mly" +# 1315 "parser_cocci_menhir.mly" ( _1 ) -# 25022 "parser_cocci_menhir.ml" +# 25082 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25054,22 +25114,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 25058 "parser_cocci_menhir.ml" +# 25118 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr = Obj.magic _3 in let _2 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 25064 "parser_cocci_menhir.ml" +# 25124 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_postfix_expr_expr_invalid_ = -# 1310 "parser_cocci_menhir.mly" +# 1317 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, P.clt2mcode "]" _4)) ) -# 25073 "parser_cocci_menhir.ml" +# 25133 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25101,15 +25161,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 25105 "parser_cocci_menhir.ml" +# 25165 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_postfix_expr_expr_invalid_ = -# 1313 "parser_cocci_menhir.mly" +# 1320 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) -# 25113 "parser_cocci_menhir.ml" +# 25173 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25141,16 +25201,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 25145 "parser_cocci_menhir.ml" +# 25205 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_postfix_expr_expr_invalid_ = -# 1315 "parser_cocci_menhir.mly" +# 1322 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, _3)) ) -# 25154 "parser_cocci_menhir.ml" +# 25214 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25176,15 +25236,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 25180 "parser_cocci_menhir.ml" +# 25240 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_postfix_expr_expr_invalid_ = -# 1318 "parser_cocci_menhir.mly" +# 1325 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) -# 25188 "parser_cocci_menhir.ml" +# 25248 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25210,15 +25270,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 25214 "parser_cocci_menhir.ml" +# 25274 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_postfix_expr_expr_invalid_ = -# 1320 "parser_cocci_menhir.mly" +# 1327 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) -# 25222 "parser_cocci_menhir.ml" +# 25282 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25254,23 +25314,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 25258 "parser_cocci_menhir.ml" +# 25318 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr_list_option = Obj.magic _3 in let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 25264 "parser_cocci_menhir.ml" +# 25324 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_postfix_expr_expr_invalid_ = -# 1322 "parser_cocci_menhir.mly" +# 1329 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, _3, P.clt2mcode ")" _4)) ) -# 25274 "parser_cocci_menhir.ml" +# 25334 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25292,9 +25352,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1327 "parser_cocci_menhir.mly" +# 1334 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Ident(_1)) ) -# 25298 "parser_cocci_menhir.ml" +# 25358 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25315,15 +25375,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 25319 "parser_cocci_menhir.ml" +# 25379 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1329 "parser_cocci_menhir.mly" +# 1336 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 25327 "parser_cocci_menhir.ml" +# 25387 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25344,15 +25404,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 25348 "parser_cocci_menhir.ml" +# 25408 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1332 "parser_cocci_menhir.mly" +# 1339 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) -# 25356 "parser_cocci_menhir.ml" +# 25416 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25373,15 +25433,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 25377 "parser_cocci_menhir.ml" +# 25437 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1335 "parser_cocci_menhir.mly" +# 1342 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) -# 25385 "parser_cocci_menhir.ml" +# 25445 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25402,15 +25462,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 25406 "parser_cocci_menhir.ml" +# 25466 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1338 "parser_cocci_menhir.mly" +# 1345 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) -# 25414 "parser_cocci_menhir.ml" +# 25474 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25430,17 +25490,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 25435 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 25495 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1341 "parser_cocci_menhir.mly" +# 1348 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) ) -# 25444 "parser_cocci_menhir.ml" +# 25504 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25461,15 +25521,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 63 "parser_cocci_menhir.mly" (Parse_aux.expinfo) -# 25465 "parser_cocci_menhir.ml" +# 25525 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1345 "parser_cocci_menhir.mly" +# 1352 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,clt) = _1 in Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) -# 25473 "parser_cocci_menhir.ml" +# 25533 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25489,17 +25549,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 25494 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 25554 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1348 "parser_cocci_menhir.mly" +# 1355 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) ) -# 25503 "parser_cocci_menhir.ml" +# 25563 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25519,17 +25579,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 25524 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 25584 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1352 "parser_cocci_menhir.mly" +# 1359 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) ) -# 25533 "parser_cocci_menhir.ml" +# 25593 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25549,17 +25609,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 25554 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 25614 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1356 "parser_cocci_menhir.mly" +# 1363 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) ) -# 25563 "parser_cocci_menhir.ml" +# 25623 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25590,21 +25650,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 25594 "parser_cocci_menhir.ml" +# 25654 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 25600 "parser_cocci_menhir.ml" +# 25660 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1360 "parser_cocci_menhir.mly" +# 1367 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, P.clt2mcode ")" _3)) ) -# 25608 "parser_cocci_menhir.ml" +# 25668 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25635,23 +25695,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 25639 "parser_cocci_menhir.ml" +# 25699 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 25645 "parser_cocci_menhir.ml" +# 25705 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1363 "parser_cocci_menhir.mly" +# 1370 "parser_cocci_menhir.mly" ( let (mids,code) = _2 in Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, code, mids, P.clt2mcode ")" _3)) ) -# 25655 "parser_cocci_menhir.ml" +# 25715 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25673,9 +25733,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1367 "parser_cocci_menhir.mly" +# 1374 "parser_cocci_menhir.mly" ( _1 ) -# 25679 "parser_cocci_menhir.ml" +# 25739 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25697,9 +25757,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1327 "parser_cocci_menhir.mly" +# 1334 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Ident(_1)) ) -# 25703 "parser_cocci_menhir.ml" +# 25763 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25720,15 +25780,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 25724 "parser_cocci_menhir.ml" +# 25784 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1329 "parser_cocci_menhir.mly" +# 1336 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 25732 "parser_cocci_menhir.ml" +# 25792 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25749,15 +25809,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 25753 "parser_cocci_menhir.ml" +# 25813 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1332 "parser_cocci_menhir.mly" +# 1339 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) -# 25761 "parser_cocci_menhir.ml" +# 25821 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25778,15 +25838,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 25782 "parser_cocci_menhir.ml" +# 25842 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1335 "parser_cocci_menhir.mly" +# 1342 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) -# 25790 "parser_cocci_menhir.ml" +# 25850 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25807,15 +25867,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 25811 "parser_cocci_menhir.ml" +# 25871 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1338 "parser_cocci_menhir.mly" +# 1345 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) -# 25819 "parser_cocci_menhir.ml" +# 25879 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25835,17 +25895,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 25840 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 25900 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1341 "parser_cocci_menhir.mly" +# 1348 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) ) -# 25849 "parser_cocci_menhir.ml" +# 25909 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25866,15 +25926,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 63 "parser_cocci_menhir.mly" (Parse_aux.expinfo) -# 25870 "parser_cocci_menhir.ml" +# 25930 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1345 "parser_cocci_menhir.mly" +# 1352 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,clt) = _1 in Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) -# 25878 "parser_cocci_menhir.ml" +# 25938 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25894,17 +25954,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 25899 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 25959 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1348 "parser_cocci_menhir.mly" +# 1355 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) ) -# 25908 "parser_cocci_menhir.ml" +# 25968 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25924,17 +25984,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 25929 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 25989 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1352 "parser_cocci_menhir.mly" +# 1359 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) ) -# 25938 "parser_cocci_menhir.ml" +# 25998 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25954,17 +26014,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 25959 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 26019 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1356 "parser_cocci_menhir.mly" +# 1363 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) ) -# 25968 "parser_cocci_menhir.ml" +# 26028 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25995,21 +26055,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 25999 "parser_cocci_menhir.ml" +# 26059 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 26005 "parser_cocci_menhir.ml" +# 26065 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1360 "parser_cocci_menhir.mly" +# 1367 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, P.clt2mcode ")" _3)) ) -# 26013 "parser_cocci_menhir.ml" +# 26073 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26040,23 +26100,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 26044 "parser_cocci_menhir.ml" +# 26104 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 26050 "parser_cocci_menhir.ml" +# 26110 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1363 "parser_cocci_menhir.mly" +# 1370 "parser_cocci_menhir.mly" ( let (mids,code) = _2 in Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, code, mids, P.clt2mcode ")" _3)) ) -# 26060 "parser_cocci_menhir.ml" +# 26120 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26078,9 +26138,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1367 "parser_cocci_menhir.mly" +# 1374 "parser_cocci_menhir.mly" ( _1 ) -# 26084 "parser_cocci_menhir.ml" +# 26144 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26102,9 +26162,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1327 "parser_cocci_menhir.mly" +# 1334 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Ident(_1)) ) -# 26108 "parser_cocci_menhir.ml" +# 26168 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26125,15 +26185,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 26129 "parser_cocci_menhir.ml" +# 26189 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1329 "parser_cocci_menhir.mly" +# 1336 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 26137 "parser_cocci_menhir.ml" +# 26197 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26154,15 +26214,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 26158 "parser_cocci_menhir.ml" +# 26218 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1332 "parser_cocci_menhir.mly" +# 1339 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) -# 26166 "parser_cocci_menhir.ml" +# 26226 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26183,15 +26243,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 26187 "parser_cocci_menhir.ml" +# 26247 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1335 "parser_cocci_menhir.mly" +# 1342 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) -# 26195 "parser_cocci_menhir.ml" +# 26255 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26212,15 +26272,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 26216 "parser_cocci_menhir.ml" +# 26276 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1338 "parser_cocci_menhir.mly" +# 1345 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) -# 26224 "parser_cocci_menhir.ml" +# 26284 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26240,17 +26300,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 26245 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 26305 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1341 "parser_cocci_menhir.mly" +# 1348 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) ) -# 26254 "parser_cocci_menhir.ml" +# 26314 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26271,15 +26331,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 63 "parser_cocci_menhir.mly" (Parse_aux.expinfo) -# 26275 "parser_cocci_menhir.ml" +# 26335 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1345 "parser_cocci_menhir.mly" +# 1352 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,clt) = _1 in Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) -# 26283 "parser_cocci_menhir.ml" +# 26343 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26299,17 +26359,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 26304 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 26364 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1348 "parser_cocci_menhir.mly" +# 1355 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) ) -# 26313 "parser_cocci_menhir.ml" +# 26373 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26329,17 +26389,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 26334 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 26394 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1352 "parser_cocci_menhir.mly" +# 1359 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) ) -# 26343 "parser_cocci_menhir.ml" +# 26403 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26359,17 +26419,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 26364 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 26424 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1356 "parser_cocci_menhir.mly" +# 1363 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) ) -# 26373 "parser_cocci_menhir.ml" +# 26433 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26400,21 +26460,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 26404 "parser_cocci_menhir.ml" +# 26464 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 26410 "parser_cocci_menhir.ml" +# 26470 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1360 "parser_cocci_menhir.mly" +# 1367 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, P.clt2mcode ")" _3)) ) -# 26418 "parser_cocci_menhir.ml" +# 26478 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26445,23 +26505,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 26449 "parser_cocci_menhir.ml" +# 26509 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 26455 "parser_cocci_menhir.ml" +# 26515 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1363 "parser_cocci_menhir.mly" +# 1370 "parser_cocci_menhir.mly" ( let (mids,code) = _2 in Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, code, mids, P.clt2mcode ")" _3)) ) -# 26465 "parser_cocci_menhir.ml" +# 26525 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26483,9 +26543,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1367 "parser_cocci_menhir.mly" +# 1374 "parser_cocci_menhir.mly" ( _1 ) -# 26489 "parser_cocci_menhir.ml" +# 26549 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26507,9 +26567,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1327 "parser_cocci_menhir.mly" +# 1334 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Ident(_1)) ) -# 26513 "parser_cocci_menhir.ml" +# 26573 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26530,15 +26590,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 26534 "parser_cocci_menhir.ml" +# 26594 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1329 "parser_cocci_menhir.mly" +# 1336 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 26542 "parser_cocci_menhir.ml" +# 26602 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26559,15 +26619,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 26563 "parser_cocci_menhir.ml" +# 26623 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1332 "parser_cocci_menhir.mly" +# 1339 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) -# 26571 "parser_cocci_menhir.ml" +# 26631 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26588,15 +26648,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 26592 "parser_cocci_menhir.ml" +# 26652 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1335 "parser_cocci_menhir.mly" +# 1342 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) -# 26600 "parser_cocci_menhir.ml" +# 26660 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26617,15 +26677,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 26621 "parser_cocci_menhir.ml" +# 26681 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1338 "parser_cocci_menhir.mly" +# 1345 "parser_cocci_menhir.mly" ( let (x,clt) = _1 in Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) -# 26629 "parser_cocci_menhir.ml" +# 26689 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26645,17 +26705,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 26650 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 26710 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1341 "parser_cocci_menhir.mly" +# 1348 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) ) -# 26659 "parser_cocci_menhir.ml" +# 26719 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26676,15 +26736,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 63 "parser_cocci_menhir.mly" (Parse_aux.expinfo) -# 26680 "parser_cocci_menhir.ml" +# 26740 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1345 "parser_cocci_menhir.mly" +# 1352 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,clt) = _1 in Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) -# 26688 "parser_cocci_menhir.ml" +# 26748 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26704,17 +26764,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 26709 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 26769 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1348 "parser_cocci_menhir.mly" +# 1355 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) ) -# 26718 "parser_cocci_menhir.ml" +# 26778 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26734,17 +26794,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 26739 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 26799 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1352 "parser_cocci_menhir.mly" +# 1359 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) ) -# 26748 "parser_cocci_menhir.ml" +# 26808 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26764,17 +26824,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct } = _menhir_stack in let _1 : ( # 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 26769 "parser_cocci_menhir.ml" + (Parse_aux.typed_expinfo) +# 26829 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1356 "parser_cocci_menhir.mly" +# 1363 "parser_cocci_menhir.mly" ( let (nm,constraints,pure,ty,clt) = _1 in Ast0.wrap (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) ) -# 26778 "parser_cocci_menhir.ml" +# 26838 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26805,21 +26865,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 26809 "parser_cocci_menhir.ml" +# 26869 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 26815 "parser_cocci_menhir.ml" +# 26875 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1360 "parser_cocci_menhir.mly" +# 1367 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, P.clt2mcode ")" _3)) ) -# 26823 "parser_cocci_menhir.ml" +# 26883 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26850,23 +26910,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 26854 "parser_cocci_menhir.ml" +# 26914 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_midzero_list_expr_eexpr_ = Obj.magic _2 in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 26860 "parser_cocci_menhir.ml" +# 26920 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1363 "parser_cocci_menhir.mly" +# 1370 "parser_cocci_menhir.mly" ( let (mids,code) = _2 in Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, code, mids, P.clt2mcode ")" _3)) ) -# 26870 "parser_cocci_menhir.ml" +# 26930 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26888,9 +26948,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_primary_expr_expr_invalid_ = -# 1367 "parser_cocci_menhir.mly" +# 1374 "parser_cocci_menhir.mly" ( _1 ) -# 26894 "parser_cocci_menhir.ml" +# 26954 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26912,7 +26972,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_pure = # 190 "parser_cocci_menhir.mly" ( Ast0.Pure ) -# 26916 "parser_cocci_menhir.ml" +# 26976 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26934,7 +26994,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_pure = # 191 "parser_cocci_menhir.mly" ( Ast0.Context ) -# 26938 "parser_cocci_menhir.ml" +# 26998 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26960,7 +27020,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_pure = # 192 "parser_cocci_menhir.mly" ( Ast0.PureContext ) -# 26964 "parser_cocci_menhir.ml" +# 27024 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26986,7 +27046,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_pure = # 193 "parser_cocci_menhir.mly" ( Ast0.PureContext ) -# 26990 "parser_cocci_menhir.ml" +# 27050 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27003,7 +27063,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_pure = # 194 "parser_cocci_menhir.mly" ( Ast0.Impure ) -# 27007 "parser_cocci_menhir.ml" +# 27067 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27024,14 +27084,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 27028 "parser_cocci_menhir.ml" +# 27088 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident = -# 1381 "parser_cocci_menhir.mly" +# 1388 "parser_cocci_menhir.mly" ( _1 ) -# 27035 "parser_cocci_menhir.ml" +# 27095 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27053,9 +27113,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1387 "parser_cocci_menhir.mly" +# 1394 "parser_cocci_menhir.mly" ( (None,P.id2name _1) ) -# 27059 "parser_cocci_menhir.ml" +# 27119 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27077,9 +27137,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1388 "parser_cocci_menhir.mly" +# 1395 "parser_cocci_menhir.mly" ( _1 ) -# 27083 "parser_cocci_menhir.ml" +# 27143 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27099,9 +27159,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1389 "parser_cocci_menhir.mly" +# 1396 "parser_cocci_menhir.mly" ( (None, "identifier") ) -# 27105 "parser_cocci_menhir.ml" +# 27165 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27121,9 +27181,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1390 "parser_cocci_menhir.mly" +# 1397 "parser_cocci_menhir.mly" ( (None, "expression") ) -# 27127 "parser_cocci_menhir.ml" +# 27187 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27143,9 +27203,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1391 "parser_cocci_menhir.mly" +# 1398 "parser_cocci_menhir.mly" ( (None, "statement") ) -# 27149 "parser_cocci_menhir.ml" +# 27209 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27165,9 +27225,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1392 "parser_cocci_menhir.mly" +# 1399 "parser_cocci_menhir.mly" ( (None, "function") ) -# 27171 "parser_cocci_menhir.ml" +# 27231 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27187,9 +27247,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1393 "parser_cocci_menhir.mly" +# 1400 "parser_cocci_menhir.mly" ( (None, "local") ) -# 27193 "parser_cocci_menhir.ml" +# 27253 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27209,9 +27269,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1394 "parser_cocci_menhir.mly" +# 1401 "parser_cocci_menhir.mly" ( (None, "type") ) -# 27215 "parser_cocci_menhir.ml" +# 27275 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27231,9 +27291,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1395 "parser_cocci_menhir.mly" +# 1402 "parser_cocci_menhir.mly" ( (None, "parameter") ) -# 27237 "parser_cocci_menhir.ml" +# 27297 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27253,9 +27313,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1396 "parser_cocci_menhir.mly" +# 1403 "parser_cocci_menhir.mly" ( (None, "idexpression") ) -# 27259 "parser_cocci_menhir.ml" +# 27319 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27275,9 +27335,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1397 "parser_cocci_menhir.mly" +# 1404 "parser_cocci_menhir.mly" ( (None, "initialiser") ) -# 27281 "parser_cocci_menhir.ml" +# 27341 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27297,9 +27357,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1398 "parser_cocci_menhir.mly" +# 1405 "parser_cocci_menhir.mly" ( (None, "list") ) -# 27303 "parser_cocci_menhir.ml" +# 27363 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27319,9 +27379,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1399 "parser_cocci_menhir.mly" +# 1406 "parser_cocci_menhir.mly" ( (None, "fresh") ) -# 27325 "parser_cocci_menhir.ml" +# 27385 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27341,9 +27401,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1400 "parser_cocci_menhir.mly" +# 1407 "parser_cocci_menhir.mly" ( (None, "constant") ) -# 27347 "parser_cocci_menhir.ml" +# 27407 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27363,9 +27423,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1401 "parser_cocci_menhir.mly" +# 1408 "parser_cocci_menhir.mly" ( (None, "error") ) -# 27369 "parser_cocci_menhir.ml" +# 27429 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27385,9 +27445,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1402 "parser_cocci_menhir.mly" +# 1409 "parser_cocci_menhir.mly" ( (None, "words") ) -# 27391 "parser_cocci_menhir.ml" +# 27451 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27407,9 +27467,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1403 "parser_cocci_menhir.mly" +# 1410 "parser_cocci_menhir.mly" ( (None, "pure") ) -# 27413 "parser_cocci_menhir.ml" +# 27473 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27429,9 +27489,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1404 "parser_cocci_menhir.mly" +# 1411 "parser_cocci_menhir.mly" ( (None, "context") ) -# 27435 "parser_cocci_menhir.ml" +# 27495 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27451,9 +27511,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1405 "parser_cocci_menhir.mly" +# 1412 "parser_cocci_menhir.mly" ( (None, "generated") ) -# 27457 "parser_cocci_menhir.ml" +# 27517 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27473,9 +27533,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1406 "parser_cocci_menhir.mly" +# 1413 "parser_cocci_menhir.mly" ( (None, "typedef") ) -# 27479 "parser_cocci_menhir.ml" +# 27539 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27495,9 +27555,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1407 "parser_cocci_menhir.mly" +# 1414 "parser_cocci_menhir.mly" ( (None, "declarer") ) -# 27501 "parser_cocci_menhir.ml" +# 27561 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27517,9 +27577,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1408 "parser_cocci_menhir.mly" +# 1415 "parser_cocci_menhir.mly" ( (None, "iterator") ) -# 27523 "parser_cocci_menhir.ml" +# 27583 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27539,9 +27599,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1409 "parser_cocci_menhir.mly" +# 1416 "parser_cocci_menhir.mly" ( (None, "name") ) -# 27545 "parser_cocci_menhir.ml" +# 27605 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27561,9 +27621,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_pure_ident_or_meta_ident = -# 1410 "parser_cocci_menhir.mly" +# 1417 "parser_cocci_menhir.mly" ( (None, "position") ) -# 27567 "parser_cocci_menhir.ml" +# 27627 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27575,9 +27635,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; + MenhirLib.EngineTypes.semv = optc; + MenhirLib.EngineTypes.startp = _startpos_optc_; + MenhirLib.EngineTypes.endp = _endpos_optc_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = i; @@ -27586,14 +27646,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let l : 'tv_loption_not_ceq_ = Obj.magic l in + let optc : 'tv_option_re_or_not_eqe_ = Obj.magic optc in let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in let _startpos = _startpos_i_ in - let _endpos = _endpos_l_ in - let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = -# 1429 "parser_cocci_menhir.mly" - ( (i,l) ) -# 27597 "parser_cocci_menhir.ml" + let _endpos = _endpos_optc_ in + let _v : 'tv_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_ = +# 1443 "parser_cocci_menhir.mly" + ( + match optc with + None -> (i, Ast0.NoConstraint) + | Some c -> (i, c) + ) +# 27661 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27605,9 +27669,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; + MenhirLib.EngineTypes.semv = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = i; @@ -27616,14 +27680,78 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let l : 'tv_loption_not_eq_ = Obj.magic l in + let c : 'tv_option_re_or_not_eqid_ = Obj.magic c in let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in let _startpos = _startpos_i_ in - let _endpos = _endpos_l_ in - let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = -# 1429 "parser_cocci_menhir.mly" - ( (i,l) ) -# 27627 "parser_cocci_menhir.ml" + let _endpos = _endpos_c_ in + let _v : 'tv_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid_ = +# 1451 "parser_cocci_menhir.mly" + ( + match c with + None -> (i, Ast.IdNoConstraint) + | Some constraint_ -> (i,constraint_) + ) +# 27695 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident_with_seed = +# 1420 "parser_cocci_menhir.mly" + ( (_1,Ast.NoVal) ) +# 27719 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = Obj.magic _3 in + let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_pure_ident_or_meta_ident_with_seed = +# 1423 "parser_cocci_menhir.mly" + ( match _3 with + [Ast.SeedString s] -> (_1,Ast.StringSeed s) + | _ -> (_1,Ast.ListSeed _3) ) +# 27755 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27646,14 +27774,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let l : 'tv_loption_not_eqe_ = Obj.magic l in + let l : 'tv_loption_not_ceq_ = Obj.magic l in let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in let _startpos = _startpos_i_ in let _endpos = _endpos_l_ in - let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = -# 1429 "parser_cocci_menhir.mly" - ( (i,l) ) -# 27657 "parser_cocci_menhir.ml" + let _v : 'tv_pure_ident_or_meta_ident_with_x_eq_not_ceq_ = +# 1437 "parser_cocci_menhir.mly" + ( + (i, l) + ) +# 27787 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27680,10 +27810,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in let _startpos = _startpos_i_ in let _endpos = _endpos_l_ in - let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = -# 1429 "parser_cocci_menhir.mly" - ( (i,l) ) -# 27687 "parser_cocci_menhir.ml" + let _v : 'tv_pure_ident_or_meta_ident_with_x_eq_not_pos_ = +# 1437 "parser_cocci_menhir.mly" + ( + (i, l) + ) +# 27819 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27696,18 +27828,127 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = re; + MenhirLib.EngineTypes.startp = _startpos_re_; + MenhirLib.EngineTypes.endp = _endpos_re_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in + let re : 'tv_regexp_eqid = Obj.magic re in + let _startpos = _startpos_re_ in + let _endpos = _endpos_re_ in + let _v : 'tv_re_or_not_eqe = +# 1495 "parser_cocci_menhir.mly" + (Ast0.NotIdCstrt (re)) +# 27843 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ne; + MenhirLib.EngineTypes.startp = _startpos_ne_; + MenhirLib.EngineTypes.endp = _endpos_ne_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let ne : 'tv_not_eqe = Obj.magic ne in + let _startpos = _startpos_ne_ in + let _endpos = _endpos_ne_ in + let _v : 'tv_re_or_not_eqe = +# 1496 "parser_cocci_menhir.mly" + (Ast0.NotExpCstrt (ne)) +# 27867 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = re; + MenhirLib.EngineTypes.startp = _startpos_re_; + MenhirLib.EngineTypes.endp = _endpos_re_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let re : 'tv_regexp_eqid = Obj.magic re in + let _startpos = _startpos_re_ in + let _endpos = _endpos_re_ in + let _v : 'tv_re_or_not_eqid = +# 1458 "parser_cocci_menhir.mly" + (re) +# 27891 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ne; + MenhirLib.EngineTypes.startp = _startpos_ne_; + MenhirLib.EngineTypes.endp = _endpos_ne_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let ne : 'tv_not_eqid = Obj.magic ne in + let _startpos = _startpos_ne_ in + let _endpos = _endpos_ne_ in + let _v : 'tv_re_or_not_eqid = +# 1459 "parser_cocci_menhir.mly" + (ne) +# 27915 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = re; + MenhirLib.EngineTypes.startp = _startpos_re_; + MenhirLib.EngineTypes.endp = _endpos_re_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let re : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27940 "parser_cocci_menhir.ml" + ) = Obj.magic re in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_or_meta_ident_with_seed = -# 1413 "parser_cocci_menhir.mly" - ( (_1,Ast.NoVal) ) -# 27711 "parser_cocci_menhir.ml" + let _endpos = _endpos_re_ in + let _v : 'tv_regexp_eqid = +# 1463 "parser_cocci_menhir.mly" + ( (if !Data.in_iso + then failwith "constraints not allowed in iso file"); + (if !Data.in_generating + then failwith "constraints not allowed in a generated rule file"); + let (s,_) = re in Ast.IdRegExp (s,Str.regexp s) + ) +# 27952 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27719,31 +27960,32 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = re; + MenhirLib.EngineTypes.startp = _startpos_re_; + MenhirLib.EngineTypes.endp = _endpos_re_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _3 : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = Obj.magic _3 in - let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in + let re : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27977 "parser_cocci_menhir.ml" + ) = Obj.magic re in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_pure_ident_or_meta_ident_with_seed = -# 1416 "parser_cocci_menhir.mly" - ( match _3 with - [Ast.SeedString s] -> (_1,Ast.StringSeed s) - | _ -> (_1,Ast.ListSeed _3) ) -# 27747 "parser_cocci_menhir.ml" + let _endpos = _endpos_re_ in + let _v : 'tv_regexp_eqid = +# 1470 "parser_cocci_menhir.mly" + ( (if !Data.in_iso + then failwith "constraints not allowed in iso file"); + (if !Data.in_generating + then failwith "constraints not allowed in a generated rule file"); + let (s,_) = re in Ast.IdNotRegExp (s,Str.regexp s) + ) +# 27989 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27760,11 +28002,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 131 "parser_cocci_menhir.mly" (unit) -# 27764 "parser_cocci_menhir.ml" +# 28006 "parser_cocci_menhir.ml" ) = # 172 "parser_cocci_menhir.mly" ( ) -# 27768 "parser_cocci_menhir.ml" +# 28010 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27786,9 +28028,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_rule_elem_statement = -# 893 "parser_cocci_menhir.mly" +# 900 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),_1)) ) -# 27792 "parser_cocci_menhir.ml" +# 28034 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27814,15 +28056,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 27818 "parser_cocci_menhir.ml" +# 28060 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_expr = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_rule_elem_statement = -# 894 "parser_cocci_menhir.mly" +# 901 "parser_cocci_menhir.mly" ( P.exp_stm _1 _2 ) -# 27826 "parser_cocci_menhir.ml" +# 28068 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27853,20 +28095,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 27857 "parser_cocci_menhir.ml" +# 28099 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 27863 "parser_cocci_menhir.ml" +# 28105 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_rule_elem_statement = -# 895 "parser_cocci_menhir.mly" +# 902 "parser_cocci_menhir.mly" ( P.ret_exp _1 _2 _3 ) -# 27870 "parser_cocci_menhir.ml" +# 28112 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27892,19 +28134,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 27896 "parser_cocci_menhir.ml" +# 28138 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 27901 "parser_cocci_menhir.ml" +# 28143 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_rule_elem_statement = -# 896 "parser_cocci_menhir.mly" +# 903 "parser_cocci_menhir.mly" ( P.ret _1 _2 ) -# 27908 "parser_cocci_menhir.ml" +# 28150 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27930,19 +28172,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 27934 "parser_cocci_menhir.ml" +# 28176 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 27939 "parser_cocci_menhir.ml" +# 28181 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_rule_elem_statement = -# 897 "parser_cocci_menhir.mly" +# 904 "parser_cocci_menhir.mly" ( P.break _1 _2 ) -# 27946 "parser_cocci_menhir.ml" +# 28188 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27968,19 +28210,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 27972 "parser_cocci_menhir.ml" +# 28214 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 27977 "parser_cocci_menhir.ml" +# 28219 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_rule_elem_statement = -# 898 "parser_cocci_menhir.mly" +# 905 "parser_cocci_menhir.mly" ( P.cont _1 _2 ) -# 27984 "parser_cocci_menhir.ml" +# 28226 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28011,24 +28253,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 28015 "parser_cocci_menhir.ml" +# 28257 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_midzero_list_rule_elem_statement_rule_elem_statement_ = Obj.magic _2 in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 28021 "parser_cocci_menhir.ml" +# 28263 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_rule_elem_statement = -# 900 "parser_cocci_menhir.mly" +# 907 "parser_cocci_menhir.mly" ( let (mids,code) = _2 in Ast0.wrap (Ast0.Disj(P.clt2mcode "(" _1, List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code, mids, P.clt2mcode ")" _3)) ) -# 28032 "parser_cocci_menhir.ml" +# 28274 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28084,18 +28326,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 153 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 28088 "parser_cocci_menhir.ml" +# 28330 "parser_cocci_menhir.ml" ) = let nm = # 39 "standard.mly" ( None ) -# 28093 "parser_cocci_menhir.ml" +# 28335 "parser_cocci_menhir.ml" in # 202 "parser_cocci_menhir.mly" ( P.make_cocci_rule_name_result nm d i a e ee ) -# 28099 "parser_cocci_menhir.ml" +# 28341 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28157,19 +28399,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 153 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 28161 "parser_cocci_menhir.ml" +# 28403 "parser_cocci_menhir.ml" ) = let nm = let x = x0 in # 41 "standard.mly" ( Some x ) -# 28167 "parser_cocci_menhir.ml" +# 28409 "parser_cocci_menhir.ml" in # 202 "parser_cocci_menhir.mly" ( P.make_cocci_rule_name_result nm d i a e ee ) -# 28173 "parser_cocci_menhir.ml" +# 28415 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28229,11 +28471,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 153 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 28233 "parser_cocci_menhir.ml" +# 28475 "parser_cocci_menhir.ml" ) = # 207 "parser_cocci_menhir.mly" ( P.make_generated_rule_name_result None d i a e ee ) -# 28237 "parser_cocci_menhir.ml" +# 28479 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28275,11 +28517,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 153 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 28279 "parser_cocci_menhir.ml" +# 28521 "parser_cocci_menhir.ml" ) = # 209 "parser_cocci_menhir.mly" ( P.make_script_rule_name_result lang d ) -# 28283 "parser_cocci_menhir.ml" +# 28525 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28315,11 +28557,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 153 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 28319 "parser_cocci_menhir.ml" +# 28561 "parser_cocci_menhir.ml" ) = # 211 "parser_cocci_menhir.mly" ( P.make_initial_script_rule_name_result lang ) -# 28323 "parser_cocci_menhir.ml" +# 28565 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28355,11 +28597,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 153 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 28359 "parser_cocci_menhir.ml" +# 28601 "parser_cocci_menhir.ml" ) = # 213 "parser_cocci_menhir.mly" ( P.make_final_script_rule_name_result lang ) -# 28363 "parser_cocci_menhir.ml" +# 28605 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28403,7 +28645,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 47 "parser_cocci_menhir.mly" (string) -# 28407 "parser_cocci_menhir.ml" +# 28649 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let py : 'tv_pure_ident = Obj.magic py in let _startpos = _startpos_py_ in @@ -28411,11 +28653,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : ( # 159 "parser_cocci_menhir.mly" (string * (string * string)) -# 28415 "parser_cocci_menhir.ml" +# 28657 "parser_cocci_menhir.ml" ) = -# 1895 "parser_cocci_menhir.mly" +# 1948 "parser_cocci_menhir.mly" ( (P.id2name py, (_3, P.id2name cocci)) ) -# 28419 "parser_cocci_menhir.ml" +# 28661 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28436,14 +28678,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 28440 "parser_cocci_menhir.ml" +# 28682 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_seed_elem = -# 1421 "parser_cocci_menhir.mly" +# 1428 "parser_cocci_menhir.mly" ( let (x,_) = _1 in Ast.SeedString x ) -# 28447 "parser_cocci_menhir.ml" +# 28689 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28464,14 +28706,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 61 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 28468 "parser_cocci_menhir.ml" +# 28710 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_seed_elem = -# 1422 "parser_cocci_menhir.mly" +# 1429 "parser_cocci_menhir.mly" ( let (x,_,_,_) = _1 in Ast.SeedId x ) -# 28475 "parser_cocci_menhir.ml" +# 28717 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28502,16 +28744,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 47 "parser_cocci_menhir.mly" (string) -# 28506 "parser_cocci_menhir.ml" +# 28748 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_seed_elem = -# 1424 "parser_cocci_menhir.mly" +# 1431 "parser_cocci_menhir.mly" ( let nm = (_1,P.id2name _3) in P.check_meta(Ast.MetaIdDecl(Ast.NONE,nm)); Ast.SeedId nm ) -# 28515 "parser_cocci_menhir.ml" +# 28757 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28532,14 +28774,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let x : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 28536 "parser_cocci_menhir.ml" +# 28778 "parser_cocci_menhir.ml" ) = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : 'tv_separated_nonempty_list_TComma_TString_ = # 144 "standard.mly" ( [ x ] ) -# 28543 "parser_cocci_menhir.ml" +# 28785 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28570,14 +28812,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let x : ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 28574 "parser_cocci_menhir.ml" +# 28816 "parser_cocci_menhir.ml" ) = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in let _v : 'tv_separated_nonempty_list_TComma_TString_ = # 146 "standard.mly" ( x :: xs ) -# 28581 "parser_cocci_menhir.ml" +# 28823 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28601,7 +28843,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = # 144 "standard.mly" ( [ x ] ) -# 28605 "parser_cocci_menhir.ml" +# 28847 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28635,7 +28877,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = # 146 "standard.mly" ( x :: xs ) -# 28639 "parser_cocci_menhir.ml" +# 28881 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28659,7 +28901,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_ctype_ = # 144 "standard.mly" ( [ x ] ) -# 28663 "parser_cocci_menhir.ml" +# 28905 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28693,7 +28935,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_ctype_ = # 146 "standard.mly" ( x :: xs ) -# 28697 "parser_cocci_menhir.ml" +# 28939 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28717,7 +28959,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = # 144 "standard.mly" ( [ x ] ) -# 28721 "parser_cocci_menhir.ml" +# 28963 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28751,7 +28993,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = # 146 "standard.mly" ( x :: xs ) -# 28755 "parser_cocci_menhir.ml" +# 28997 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28775,7 +29017,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = # 144 "standard.mly" ( [ x ] ) -# 28779 "parser_cocci_menhir.ml" +# 29021 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28809,7 +29051,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = # 146 "standard.mly" ( x :: xs ) -# 28813 "parser_cocci_menhir.ml" +# 29055 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28833,7 +29075,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = # 144 "standard.mly" ( [ x ] ) -# 28837 "parser_cocci_menhir.ml" +# 29079 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28867,7 +29109,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = # 146 "standard.mly" ( x :: xs ) -# 28871 "parser_cocci_menhir.ml" +# 29113 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28891,7 +29133,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = # 144 "standard.mly" ( [ x ] ) -# 28895 "parser_cocci_menhir.ml" +# 29137 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28925,7 +29167,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = # 146 "standard.mly" ( x :: xs ) -# 28929 "parser_cocci_menhir.ml" +# 29171 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28949,7 +29191,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = # 144 "standard.mly" ( [ x ] ) -# 28953 "parser_cocci_menhir.ml" +# 29195 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28983,7 +29225,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = # 146 "standard.mly" ( x :: xs ) -# 28987 "parser_cocci_menhir.ml" +# 29229 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29001,13 +29243,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = Obj.magic x in + let x : 'tv_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_ = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = # 144 "standard.mly" ( [ x ] ) -# 29011 "parser_cocci_menhir.ml" +# 29253 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29034,14 +29276,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = Obj.magic x in + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_ = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe__ = # 146 "standard.mly" ( x :: xs ) -# 29045 "parser_cocci_menhir.ml" +# 29287 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29059,13 +29301,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = Obj.magic x in + let x : 'tv_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid_ = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = # 144 "standard.mly" ( [ x ] ) -# 29069 "parser_cocci_menhir.ml" +# 29311 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29092,14 +29334,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = Obj.magic x in + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid_ = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = # 146 "standard.mly" ( x :: xs ) -# 29103 "parser_cocci_menhir.ml" +# 29345 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29117,13 +29359,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = Obj.magic x in + let x : 'tv_pure_ident_or_meta_ident_with_seed = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = # 144 "standard.mly" ( [ x ] ) -# 29127 "parser_cocci_menhir.ml" +# 29369 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29150,14 +29392,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = Obj.magic x in + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_seed = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = # 146 "standard.mly" ( x :: xs ) -# 29161 "parser_cocci_menhir.ml" +# 29403 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29175,13 +29417,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = Obj.magic x in + let x : 'tv_pure_ident_or_meta_ident_with_x_eq_not_ceq_ = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_ceq__ = # 144 "standard.mly" ( [ x ] ) -# 29185 "parser_cocci_menhir.ml" +# 29427 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29208,14 +29450,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = Obj.magic x in + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_ceq__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_x_eq_not_ceq_ = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_ceq__ = # 146 "standard.mly" ( x :: xs ) -# 29219 "parser_cocci_menhir.ml" +# 29461 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29233,13 +29475,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_pure_ident_or_meta_ident_with_seed = Obj.magic x in + let x : 'tv_pure_ident_or_meta_ident_with_x_eq_not_pos_ = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_pos__ = # 144 "standard.mly" ( [ x ] ) -# 29243 "parser_cocci_menhir.ml" +# 29485 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29266,14 +29508,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_seed = Obj.magic x in + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_pos__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_x_eq_not_pos_ = Obj.magic x in let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_pos__ = # 146 "standard.mly" ( x :: xs ) -# 29277 "parser_cocci_menhir.ml" +# 29519 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29297,7 +29539,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_typedef_ident_ = # 144 "standard.mly" ( [ x ] ) -# 29301 "parser_cocci_menhir.ml" +# 29543 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29331,7 +29573,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_typedef_ident_ = # 146 "standard.mly" ( x :: xs ) -# 29335 "parser_cocci_menhir.ml" +# 29577 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29355,7 +29597,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = # 144 "standard.mly" ( [ x ] ) -# 29359 "parser_cocci_menhir.ml" +# 29601 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29389,7 +29631,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = # 146 "standard.mly" ( x :: xs ) -# 29393 "parser_cocci_menhir.ml" +# 29635 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29411,9 +29653,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_single_statement = -# 908 "parser_cocci_menhir.mly" +# 915 "parser_cocci_menhir.mly" ( _1 ) -# 29417 "parser_cocci_menhir.ml" +# 29659 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29444,24 +29686,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 29448 "parser_cocci_menhir.ml" +# 29690 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_midzero_list_statement_statement_ = Obj.magic _2 in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29454 "parser_cocci_menhir.ml" +# 29696 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_single_statement = -# 912 "parser_cocci_menhir.mly" +# 919 "parser_cocci_menhir.mly" ( let (mids,code) = _2 in Ast0.wrap (Ast0.Disj(P.clt2mcode "(" _1, List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code, mids, P.clt2mcode ")" _3)) ) -# 29465 "parser_cocci_menhir.ml" +# 29707 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29483,9 +29725,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_statement = -# 835 "parser_cocci_menhir.mly" +# 842 "parser_cocci_menhir.mly" ( _1 ) -# 29489 "parser_cocci_menhir.ml" +# 29731 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29506,14 +29748,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 29510 "parser_cocci_menhir.ml" +# 29752 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_statement = -# 837 "parser_cocci_menhir.mly" +# 844 "parser_cocci_menhir.mly" ( P.meta_stm _1 ) -# 29517 "parser_cocci_menhir.ml" +# 29759 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29539,15 +29781,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 29543 "parser_cocci_menhir.ml" +# 29785 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_expr = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_statement = -# 839 "parser_cocci_menhir.mly" +# 846 "parser_cocci_menhir.mly" ( P.exp_stm _1 _2 ) -# 29551 "parser_cocci_menhir.ml" +# 29793 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29589,25 +29831,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 29593 "parser_cocci_menhir.ml" +# 29835 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr = Obj.magic _3 in let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29599 "parser_cocci_menhir.ml" +# 29841 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 29604 "parser_cocci_menhir.ml" +# 29846 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : 'tv_statement = -# 841 "parser_cocci_menhir.mly" +# 848 "parser_cocci_menhir.mly" ( P.ifthen _1 _2 _3 _4 _5 ) -# 29611 "parser_cocci_menhir.ml" +# 29853 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29659,31 +29901,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _6 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 29663 "parser_cocci_menhir.ml" +# 29905 "parser_cocci_menhir.ml" ) = Obj.magic _6 in let _5 : 'tv_single_statement = Obj.magic _5 in let _4 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 29669 "parser_cocci_menhir.ml" +# 29911 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr = Obj.magic _3 in let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29675 "parser_cocci_menhir.ml" +# 29917 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 29680 "parser_cocci_menhir.ml" +# 29922 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__7_ in let _v : 'tv_statement = -# 843 "parser_cocci_menhir.mly" +# 850 "parser_cocci_menhir.mly" ( P.ifthenelse _1 _2 _3 _4 _5 _6 _7 ) -# 29687 "parser_cocci_menhir.ml" +# 29929 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29745,37 +29987,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _8 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 29749 "parser_cocci_menhir.ml" +# 29991 "parser_cocci_menhir.ml" ) = Obj.magic _8 in let _7 : 'tv_option_eexpr_ = Obj.magic _7 in let _6 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 29755 "parser_cocci_menhir.ml" +# 29997 "parser_cocci_menhir.ml" ) = Obj.magic _6 in let _5 : 'tv_option_eexpr_ = Obj.magic _5 in let _4 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 29761 "parser_cocci_menhir.ml" +# 30003 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_option_eexpr_ = Obj.magic _3 in let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29767 "parser_cocci_menhir.ml" +# 30009 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 29772 "parser_cocci_menhir.ml" +# 30014 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__9_ in let _v : 'tv_statement = -# 846 "parser_cocci_menhir.mly" +# 853 "parser_cocci_menhir.mly" ( P.forloop _1 _2 _3 _4 _5 _6 _7 _8 _9 ) -# 29779 "parser_cocci_menhir.ml" +# 30021 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29817,25 +30059,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 29821 "parser_cocci_menhir.ml" +# 30063 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr = Obj.magic _3 in let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29827 "parser_cocci_menhir.ml" +# 30069 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 29832 "parser_cocci_menhir.ml" +# 30074 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : 'tv_statement = -# 848 "parser_cocci_menhir.mly" +# 855 "parser_cocci_menhir.mly" ( P.whileloop _1 _2 _3 _4 _5 ) -# 29839 "parser_cocci_menhir.ml" +# 30081 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29886,36 +30128,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _7 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 29890 "parser_cocci_menhir.ml" +# 30132 "parser_cocci_menhir.ml" ) = Obj.magic _7 in let _6 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 29895 "parser_cocci_menhir.ml" +# 30137 "parser_cocci_menhir.ml" ) = Obj.magic _6 in let _5 : 'tv_eexpr = Obj.magic _5 in let _4 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29901 "parser_cocci_menhir.ml" +# 30143 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 29906 "parser_cocci_menhir.ml" +# 30148 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_single_statement = Obj.magic _2 in let _1 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 29912 "parser_cocci_menhir.ml" +# 30154 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__7_ in let _v : 'tv_statement = -# 850 "parser_cocci_menhir.mly" +# 857 "parser_cocci_menhir.mly" ( P.doloop _1 _2 _3 _4 _5 _6 _7 ) -# 29919 "parser_cocci_menhir.ml" +# 30161 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29957,21 +30199,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 29961 "parser_cocci_menhir.ml" +# 30203 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr_list_option = Obj.magic _3 in let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29967 "parser_cocci_menhir.ml" +# 30209 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_iter_ident = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : 'tv_statement = -# 852 "parser_cocci_menhir.mly" +# 859 "parser_cocci_menhir.mly" ( P.iterator _1 _2 _3 _4 _5 ) -# 29975 "parser_cocci_menhir.ml" +# 30217 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30027,37 +30269,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _8 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 30031 "parser_cocci_menhir.ml" +# 30273 "parser_cocci_menhir.ml" ) = Obj.magic _8 in let _7 : 'tv_list_case_line_ = Obj.magic _7 in let _6 : 'tv_list_decl_var_ = Obj.magic _6 in let _5 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 30038 "parser_cocci_menhir.ml" +# 30280 "parser_cocci_menhir.ml" ) = Obj.magic _5 in let _4 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 30043 "parser_cocci_menhir.ml" +# 30285 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr = Obj.magic _3 in let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 30049 "parser_cocci_menhir.ml" +# 30291 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 30054 "parser_cocci_menhir.ml" +# 30296 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__8_ in let _v : 'tv_statement = -# 854 "parser_cocci_menhir.mly" +# 861 "parser_cocci_menhir.mly" ( P.switch _1 _2 _3 _4 _5 (List.concat _6) _7 _8 ) -# 30061 "parser_cocci_menhir.ml" +# 30303 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30088,20 +30330,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 30092 "parser_cocci_menhir.ml" +# 30334 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 30098 "parser_cocci_menhir.ml" +# 30340 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_statement = -# 855 "parser_cocci_menhir.mly" +# 862 "parser_cocci_menhir.mly" ( P.ret_exp _1 _2 _3 ) -# 30105 "parser_cocci_menhir.ml" +# 30347 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30127,19 +30369,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 30131 "parser_cocci_menhir.ml" +# 30373 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 30136 "parser_cocci_menhir.ml" +# 30378 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_statement = -# 856 "parser_cocci_menhir.mly" +# 863 "parser_cocci_menhir.mly" ( P.ret _1 _2 ) -# 30143 "parser_cocci_menhir.ml" +# 30385 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30165,19 +30407,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 30169 "parser_cocci_menhir.ml" +# 30411 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 30174 "parser_cocci_menhir.ml" +# 30416 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_statement = -# 857 "parser_cocci_menhir.mly" +# 864 "parser_cocci_menhir.mly" ( P.break _1 _2 ) -# 30181 "parser_cocci_menhir.ml" +# 30423 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30203,19 +30445,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 30207 "parser_cocci_menhir.ml" +# 30449 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 30212 "parser_cocci_menhir.ml" +# 30454 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_statement = -# 858 "parser_cocci_menhir.mly" +# 865 "parser_cocci_menhir.mly" ( P.cont _1 _2 ) -# 30219 "parser_cocci_menhir.ml" +# 30461 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30241,15 +30483,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 30245 "parser_cocci_menhir.ml" +# 30487 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_ident = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_statement = -# 859 "parser_cocci_menhir.mly" +# 866 "parser_cocci_menhir.mly" ( P.label _1 _2 ) -# 30253 "parser_cocci_menhir.ml" +# 30495 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30280,20 +30522,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 30284 "parser_cocci_menhir.ml" +# 30526 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_ident = Obj.magic _2 in let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 30290 "parser_cocci_menhir.ml" +# 30532 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_statement = -# 860 "parser_cocci_menhir.mly" +# 867 "parser_cocci_menhir.mly" ( P.goto _1 _2 _3 ) -# 30297 "parser_cocci_menhir.ml" +# 30539 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30324,20 +30566,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 30328 "parser_cocci_menhir.ml" +# 30570 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_fun_start = Obj.magic _2 in let _1 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 30334 "parser_cocci_menhir.ml" +# 30576 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_statement = -# 862 "parser_cocci_menhir.mly" +# 869 "parser_cocci_menhir.mly" ( P.seq _1 _2 _3 ) -# 30341 "parser_cocci_menhir.ml" +# 30583 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30364,14 +30606,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 30368 "parser_cocci_menhir.ml" +# 30610 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos_w_ in let _v : 'tv_stm_dots = -# 866 "parser_cocci_menhir.mly" +# 873 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." _1, List.concat w)) ) -# 30375 "parser_cocci_menhir.ml" +# 30617 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30407,22 +30649,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 30411 "parser_cocci_menhir.ml" +# 30653 "parser_cocci_menhir.ml" ) = Obj.magic c in let b : 'tv_nest_start = Obj.magic b in let w : 'tv_list_whenppdecs_ = Obj.magic w in let _1 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 30418 "parser_cocci_menhir.ml" +# 30660 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos_c_ in let _v : 'tv_stm_dots = -# 868 "parser_cocci_menhir.mly" +# 875 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." _1, b, P.clt2mcode "...>" c, List.concat w, false)) ) -# 30426 "parser_cocci_menhir.ml" +# 30668 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30458,22 +30700,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 30462 "parser_cocci_menhir.ml" +# 30704 "parser_cocci_menhir.ml" ) = Obj.magic c in let b : 'tv_nest_start = Obj.magic b in let w : 'tv_list_whenppdecs_ = Obj.magic w in let _1 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 30469 "parser_cocci_menhir.ml" +# 30711 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos_c_ in let _v : 'tv_stm_dots = -# 871 "parser_cocci_menhir.mly" +# 878 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." _1, b, P.clt2mcode "...+>" c, List.concat w, true)) ) -# 30477 "parser_cocci_menhir.ml" +# 30719 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30494,14 +30736,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 30498 "parser_cocci_menhir.ml" +# 30740 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_storage = -# 797 "parser_cocci_menhir.mly" +# 804 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Static s ) -# 30505 "parser_cocci_menhir.ml" +# 30747 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30522,14 +30764,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 30526 "parser_cocci_menhir.ml" +# 30768 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_storage = -# 798 "parser_cocci_menhir.mly" +# 805 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Auto s ) -# 30533 "parser_cocci_menhir.ml" +# 30775 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30550,14 +30792,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 30554 "parser_cocci_menhir.ml" +# 30796 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_storage = -# 799 "parser_cocci_menhir.mly" +# 806 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Register s ) -# 30561 "parser_cocci_menhir.ml" +# 30803 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30578,14 +30820,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 30582 "parser_cocci_menhir.ml" +# 30824 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_storage = -# 800 "parser_cocci_menhir.mly" +# 807 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Extern s ) -# 30589 "parser_cocci_menhir.ml" +# 30831 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30605,9 +30847,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_struct_decl = -# 555 "parser_cocci_menhir.mly" +# 562 "parser_cocci_menhir.mly" ( [] ) -# 30611 "parser_cocci_menhir.ml" +# 30853 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30638,17 +30880,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 30642 "parser_cocci_menhir.ml" +# 30884 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_d_ident = Obj.magic d in let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos_t_ in let _endpos = _endpos_pv_ in let _v : 'tv_struct_decl = -# 557 "parser_cocci_menhir.mly" +# 564 "parser_cocci_menhir.mly" ( let (id,fn) = d in [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] ) -# 30652 "parser_cocci_menhir.ml" +# 30894 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30709,40 +30951,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 30713 "parser_cocci_menhir.ml" +# 30955 "parser_cocci_menhir.ml" ) = Obj.magic pv in let rp2 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 30718 "parser_cocci_menhir.ml" +# 30960 "parser_cocci_menhir.ml" ) = Obj.magic rp2 in let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in let lp2 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 30724 "parser_cocci_menhir.ml" +# 30966 "parser_cocci_menhir.ml" ) = Obj.magic lp2 in let rp1 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 30729 "parser_cocci_menhir.ml" +# 30971 "parser_cocci_menhir.ml" ) = Obj.magic rp1 in let d : 'tv_d_ident = Obj.magic d in let st : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 30735 "parser_cocci_menhir.ml" +# 30977 "parser_cocci_menhir.ml" ) = Obj.magic st in let lp1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 30740 "parser_cocci_menhir.ml" +# 30982 "parser_cocci_menhir.ml" ) = Obj.magic lp1 in let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos_t_ in let _endpos = _endpos_pv_ in let _v : 'tv_struct_decl = -# 561 "parser_cocci_menhir.mly" +# 568 "parser_cocci_menhir.mly" ( let (id,fn) = d in let t = Ast0.wrap @@ -30750,7 +30992,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] ) -# 30754 "parser_cocci_menhir.ml" +# 30996 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30781,7 +31023,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 30785 "parser_cocci_menhir.ml" +# 31027 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -30791,15 +31033,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 30795 "parser_cocci_menhir.ml" +# 31037 "parser_cocci_menhir.ml" in -# 569 "parser_cocci_menhir.mly" +# 576 "parser_cocci_menhir.mly" ( let (id,fn) = d in let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in [Ast0.wrap(Ast0.UnInit(None,fn idtype,id,P.clt2mcode ";" pv))] ) -# 30803 "parser_cocci_menhir.ml" +# 31045 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30835,7 +31077,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 30839 "parser_cocci_menhir.ml" +# 31081 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -30847,15 +31089,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 30851 "parser_cocci_menhir.ml" +# 31093 "parser_cocci_menhir.ml" in -# 569 "parser_cocci_menhir.mly" +# 576 "parser_cocci_menhir.mly" ( let (id,fn) = d in let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in [Ast0.wrap(Ast0.UnInit(None,fn idtype,id,P.clt2mcode ";" pv))] ) -# 30859 "parser_cocci_menhir.ml" +# 31101 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30877,9 +31119,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_struct_decl_list = -# 574 "parser_cocci_menhir.mly" +# 581 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS(_1)) ) -# 30883 "parser_cocci_menhir.ml" +# 31125 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30901,9 +31143,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_struct_decl_list_start = -# 577 "parser_cocci_menhir.mly" +# 584 "parser_cocci_menhir.mly" ( _1 ) -# 30907 "parser_cocci_menhir.ml" +# 31149 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30931,9 +31173,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_struct_decl_list_start = -# 578 "parser_cocci_menhir.mly" +# 585 "parser_cocci_menhir.mly" ( _1@_2 ) -# 30937 "parser_cocci_menhir.ml" +# 31179 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30961,9 +31203,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_d_ in let _endpos = _endpos_r_ in let _v : 'tv_struct_decl_list_start = -# 580 "parser_cocci_menhir.mly" +# 587 "parser_cocci_menhir.mly" ( (P.mkddots "..." d)::r ) -# 30967 "parser_cocci_menhir.ml" +# 31209 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30984,14 +31226,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s : ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 30988 "parser_cocci_menhir.ml" +# 31230 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_struct_or_union = -# 551 "parser_cocci_menhir.mly" +# 558 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Struct s ) -# 30995 "parser_cocci_menhir.ml" +# 31237 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31012,14 +31254,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let u : ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 31016 "parser_cocci_menhir.ml" +# 31258 "parser_cocci_menhir.ml" ) = Obj.magic u in let _startpos = _startpos_u_ in let _endpos = _endpos_u_ in let _v : 'tv_struct_or_union = -# 552 "parser_cocci_menhir.mly" +# 559 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Union u ) -# 31023 "parser_cocci_menhir.ml" +# 31265 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31041,9 +31283,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_top_eexpr = -# 1195 "parser_cocci_menhir.mly" +# 1202 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))) ) -# 31047 "parser_cocci_menhir.ml" +# 31289 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31074,20 +31316,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 31078 "parser_cocci_menhir.ml" +# 31320 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_initialize_list = Obj.magic _2 in let _1 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 31084 "parser_cocci_menhir.ml" +# 31326 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_top_init = -# 1673 "parser_cocci_menhir.mly" +# 1726 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) ) -# 31091 "parser_cocci_menhir.ml" +# 31333 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31102,9 +31344,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_toplevel_after_dots = -# 1661 "parser_cocci_menhir.mly" +# 1714 "parser_cocci_menhir.mly" ([]) -# 31108 "parser_cocci_menhir.ml" +# 31350 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31130,9 +31372,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_after_dots = -# 1662 "parser_cocci_menhir.mly" +# 1715 "parser_cocci_menhir.mly" (_2) -# 31136 "parser_cocci_menhir.ml" +# 31378 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31160,9 +31402,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_after_dots = -# 1663 "parser_cocci_menhir.mly" +# 1716 "parser_cocci_menhir.mly" ((Ast0.wrap(Ast0.Exp(_1)))::_2) -# 31166 "parser_cocci_menhir.ml" +# 31408 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31190,9 +31432,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_after_dots = -# 1664 "parser_cocci_menhir.mly" +# 1717 "parser_cocci_menhir.mly" (_1@_2) -# 31196 "parser_cocci_menhir.ml" +# 31438 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31218,9 +31460,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_after_dots_init = -# 1652 "parser_cocci_menhir.mly" +# 1705 "parser_cocci_menhir.mly" (_2) -# 31224 "parser_cocci_menhir.ml" +# 31466 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31248,9 +31490,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_after_dots_init = -# 1653 "parser_cocci_menhir.mly" +# 1706 "parser_cocci_menhir.mly" ((Ast0.wrap(Ast0.Exp(_1)))::_2) -# 31254 "parser_cocci_menhir.ml" +# 31496 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31278,9 +31520,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_after_dots_init = -# 1654 "parser_cocci_menhir.mly" +# 1707 "parser_cocci_menhir.mly" (_1@_2) -# 31284 "parser_cocci_menhir.ml" +# 31526 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31295,9 +31537,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_toplevel_after_exp = -# 1657 "parser_cocci_menhir.mly" +# 1710 "parser_cocci_menhir.mly" ([]) -# 31301 "parser_cocci_menhir.ml" +# 31543 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31325,9 +31567,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_after_exp = -# 1658 "parser_cocci_menhir.mly" +# 1711 "parser_cocci_menhir.mly" (_1::_2) -# 31331 "parser_cocci_menhir.ml" +# 31573 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31342,9 +31584,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_toplevel_after_stm = -# 1667 "parser_cocci_menhir.mly" +# 1720 "parser_cocci_menhir.mly" ([]) -# 31348 "parser_cocci_menhir.ml" +# 31590 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31372,9 +31614,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_after_stm = -# 1668 "parser_cocci_menhir.mly" +# 1721 "parser_cocci_menhir.mly" (_1::_2) -# 31378 "parser_cocci_menhir.ml" +# 31620 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31402,9 +31644,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_after_stm = -# 1669 "parser_cocci_menhir.mly" +# 1722 "parser_cocci_menhir.mly" (_1@_2) -# 31408 "parser_cocci_menhir.ml" +# 31650 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31432,9 +31674,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = -# 1647 "parser_cocci_menhir.mly" +# 1700 "parser_cocci_menhir.mly" ( _1::_2 ) -# 31438 "parser_cocci_menhir.ml" +# 31680 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31462,9 +31704,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = -# 1648 "parser_cocci_menhir.mly" +# 1701 "parser_cocci_menhir.mly" ( (Ast0.wrap(Ast0.Exp(_1)))::_2 ) -# 31468 "parser_cocci_menhir.ml" +# 31710 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31492,9 +31734,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = -# 1649 "parser_cocci_menhir.mly" +# 1702 "parser_cocci_menhir.mly" ( _1@_2 ) -# 31498 "parser_cocci_menhir.ml" +# 31740 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31527,7 +31769,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let a0 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 31531 "parser_cocci_menhir.ml" +# 31773 "parser_cocci_menhir.ml" ) = Obj.magic a0 in let _startpos = _startpos_a0_ in let _endpos = _endpos_b_ in @@ -31535,15 +31777,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let w = w0 in let a = a0 in -# 876 "parser_cocci_menhir.mly" +# 883 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." a, List.concat w)) ) -# 31541 "parser_cocci_menhir.ml" +# 31783 "parser_cocci_menhir.ml" in -# 1640 "parser_cocci_menhir.mly" +# 1693 "parser_cocci_menhir.mly" ( a::b ) -# 31547 "parser_cocci_menhir.ml" +# 31789 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31585,14 +31827,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c0 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 31589 "parser_cocci_menhir.ml" +# 31831 "parser_cocci_menhir.ml" ) = Obj.magic c0 in let b0 : 'tv_nest_start = Obj.magic b0 in let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in let a0 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 31596 "parser_cocci_menhir.ml" +# 31838 "parser_cocci_menhir.ml" ) = Obj.magic a0 in let _startpos = _startpos_a0_ in let _endpos = _endpos_b_ in @@ -31602,16 +31844,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let w = w0 in let a = a0 in -# 880 "parser_cocci_menhir.mly" +# 887 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b, P.clt2mcode "...>" c, List.concat w, false)) ) -# 31609 "parser_cocci_menhir.ml" +# 31851 "parser_cocci_menhir.ml" in -# 1641 "parser_cocci_menhir.mly" +# 1694 "parser_cocci_menhir.mly" ( a::b ) -# 31615 "parser_cocci_menhir.ml" +# 31857 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31653,14 +31895,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c0 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 31657 "parser_cocci_menhir.ml" +# 31899 "parser_cocci_menhir.ml" ) = Obj.magic c0 in let b0 : 'tv_nest_start = Obj.magic b0 in let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in let a0 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 31664 "parser_cocci_menhir.ml" +# 31906 "parser_cocci_menhir.ml" ) = Obj.magic a0 in let _startpos = _startpos_a0_ in let _endpos = _endpos_b_ in @@ -31670,16 +31912,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let w = w0 in let a = a0 in -# 883 "parser_cocci_menhir.mly" +# 890 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b, P.clt2mcode "...+>" c, List.concat w, true)) ) -# 31677 "parser_cocci_menhir.ml" +# 31919 "parser_cocci_menhir.ml" in -# 1641 "parser_cocci_menhir.mly" +# 1694 "parser_cocci_menhir.mly" ( a::b ) -# 31683 "parser_cocci_menhir.ml" +# 31925 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31715,14 +31957,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c0 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 31719 "parser_cocci_menhir.ml" +# 31961 "parser_cocci_menhir.ml" ) = Obj.magic c0 in let b0 : 'tv_nest_start = Obj.magic b0 in let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in let a0 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 31726 "parser_cocci_menhir.ml" +# 31968 "parser_cocci_menhir.ml" ) = Obj.magic a0 in let _startpos = _startpos_a0_ in let _endpos = _endpos_c0_ in @@ -31732,16 +31974,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let w = w0 in let a = a0 in -# 880 "parser_cocci_menhir.mly" +# 887 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b, P.clt2mcode "...>" c, List.concat w, false)) ) -# 31739 "parser_cocci_menhir.ml" +# 31981 "parser_cocci_menhir.ml" in -# 1642 "parser_cocci_menhir.mly" +# 1695 "parser_cocci_menhir.mly" ( [a] ) -# 31745 "parser_cocci_menhir.ml" +# 31987 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31777,14 +32019,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c0 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 31781 "parser_cocci_menhir.ml" +# 32023 "parser_cocci_menhir.ml" ) = Obj.magic c0 in let b0 : 'tv_nest_start = Obj.magic b0 in let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in let a0 : ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 31788 "parser_cocci_menhir.ml" +# 32030 "parser_cocci_menhir.ml" ) = Obj.magic a0 in let _startpos = _startpos_a0_ in let _endpos = _endpos_c0_ in @@ -31794,16 +32036,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let w = w0 in let a = a0 in -# 883 "parser_cocci_menhir.mly" +# 890 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b, P.clt2mcode "...+>" c, List.concat w, true)) ) -# 31801 "parser_cocci_menhir.ml" +# 32043 "parser_cocci_menhir.ml" in -# 1642 "parser_cocci_menhir.mly" +# 1695 "parser_cocci_menhir.mly" ( [a] ) -# 31807 "parser_cocci_menhir.ml" +# 32049 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31831,9 +32073,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = -# 1643 "parser_cocci_menhir.mly" +# 1696 "parser_cocci_menhir.mly" ( (Ast0.wrap(Ast0.Exp(_1)))::_2 ) -# 31837 "parser_cocci_menhir.ml" +# 32079 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31861,9 +32103,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = -# 1644 "parser_cocci_menhir.mly" +# 1697 "parser_cocci_menhir.mly" ( _1@_2 ) -# 31867 "parser_cocci_menhir.ml" +# 32109 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31895,12 +32137,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 31899 "parser_cocci_menhir.ml" +# 32141 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 31904 "parser_cocci_menhir.ml" +# 32146 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -31910,28 +32152,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 469 "parser_cocci_menhir.mly" +# 476 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 31916 "parser_cocci_menhir.ml" +# 32158 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 31922 "parser_cocci_menhir.ml" +# 32164 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 31929 "parser_cocci_menhir.ml" +# 32171 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 31935 "parser_cocci_menhir.ml" +# 32177 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31963,12 +32205,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 31967 "parser_cocci_menhir.ml" +# 32209 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 31972 "parser_cocci_menhir.ml" +# 32214 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -31978,28 +32220,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 471 "parser_cocci_menhir.mly" +# 478 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 31984 "parser_cocci_menhir.ml" +# 32226 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 31990 "parser_cocci_menhir.ml" +# 32232 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 31997 "parser_cocci_menhir.ml" +# 32239 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32003 "parser_cocci_menhir.ml" +# 32245 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32031,12 +32273,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 32035 "parser_cocci_menhir.ml" +# 32277 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32040 "parser_cocci_menhir.ml" +# 32282 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32046,28 +32288,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 473 "parser_cocci_menhir.mly" +# 480 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 32052 "parser_cocci_menhir.ml" +# 32294 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 32058 "parser_cocci_menhir.ml" +# 32300 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32065 "parser_cocci_menhir.ml" +# 32307 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32071 "parser_cocci_menhir.ml" +# 32313 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32099,12 +32341,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 32103 "parser_cocci_menhir.ml" +# 32345 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32108 "parser_cocci_menhir.ml" +# 32350 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32114,29 +32356,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 475 "parser_cocci_menhir.mly" +# 482 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 32121 "parser_cocci_menhir.ml" +# 32363 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 32127 "parser_cocci_menhir.ml" +# 32369 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32134 "parser_cocci_menhir.ml" +# 32376 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32140 "parser_cocci_menhir.ml" +# 32382 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32177,17 +32419,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 32181 "parser_cocci_menhir.ml" +# 32423 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 47 "parser_cocci_menhir.mly" (string) -# 32186 "parser_cocci_menhir.ml" +# 32428 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let r1 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32191 "parser_cocci_menhir.ml" +# 32433 "parser_cocci_menhir.ml" ) = Obj.magic r1 in let _startpos = _startpos_r1_ in let _endpos = _endpos_m_ in @@ -32199,33 +32441,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p = p0 in let r = r0 in -# 478 "parser_cocci_menhir.mly" +# 485 "parser_cocci_menhir.mly" ( let nm = (r,P.id2name p) in (* this is only possible when we are in a metavar decl. Otherwise, it will be represented already as a MetaType *) let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), Ast0.Impure (*will be ignored*))) ) -# 32210 "parser_cocci_menhir.ml" +# 32452 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 32216 "parser_cocci_menhir.ml" +# 32458 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32223 "parser_cocci_menhir.ml" +# 32465 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32229 "parser_cocci_menhir.ml" +# 32471 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32257,12 +32499,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 32261 "parser_cocci_menhir.ml" +# 32503 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32266 "parser_cocci_menhir.ml" +# 32508 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32272,28 +32514,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 485 "parser_cocci_menhir.mly" +# 492 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 32278 "parser_cocci_menhir.ml" +# 32520 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 32284 "parser_cocci_menhir.ml" +# 32526 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32291 "parser_cocci_menhir.ml" +# 32533 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32297 "parser_cocci_menhir.ml" +# 32539 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32330,17 +32572,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 32334 "parser_cocci_menhir.ml" +# 32576 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 32339 "parser_cocci_menhir.ml" +# 32581 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32344 "parser_cocci_menhir.ml" +# 32586 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32352,31 +32594,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty2 = ty20 in let ty1 = ty10 in -# 487 "parser_cocci_menhir.mly" +# 494 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 32361 "parser_cocci_menhir.ml" +# 32603 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 32367 "parser_cocci_menhir.ml" +# 32609 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32374 "parser_cocci_menhir.ml" +# 32616 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32380 "parser_cocci_menhir.ml" +# 32622 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32408,12 +32650,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 32412 "parser_cocci_menhir.ml" +# 32654 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32417 "parser_cocci_menhir.ml" +# 32659 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32423,28 +32665,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 469 "parser_cocci_menhir.mly" +# 476 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 32429 "parser_cocci_menhir.ml" +# 32671 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 32435 "parser_cocci_menhir.ml" +# 32677 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32442 "parser_cocci_menhir.ml" +# 32684 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32448 "parser_cocci_menhir.ml" +# 32690 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32476,12 +32718,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 32480 "parser_cocci_menhir.ml" +# 32722 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32485 "parser_cocci_menhir.ml" +# 32727 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32491,28 +32733,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 471 "parser_cocci_menhir.mly" +# 478 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 32497 "parser_cocci_menhir.ml" +# 32739 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 32503 "parser_cocci_menhir.ml" +# 32745 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32510 "parser_cocci_menhir.ml" +# 32752 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32516 "parser_cocci_menhir.ml" +# 32758 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32544,12 +32786,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 32548 "parser_cocci_menhir.ml" +# 32790 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32553 "parser_cocci_menhir.ml" +# 32795 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32559,28 +32801,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 473 "parser_cocci_menhir.mly" +# 480 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 32565 "parser_cocci_menhir.ml" +# 32807 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 32571 "parser_cocci_menhir.ml" +# 32813 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32578 "parser_cocci_menhir.ml" +# 32820 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32584 "parser_cocci_menhir.ml" +# 32826 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32612,12 +32854,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 32616 "parser_cocci_menhir.ml" +# 32858 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32621 "parser_cocci_menhir.ml" +# 32863 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32627,29 +32869,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 475 "parser_cocci_menhir.mly" +# 482 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 32634 "parser_cocci_menhir.ml" +# 32876 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 32640 "parser_cocci_menhir.ml" +# 32882 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32647 "parser_cocci_menhir.ml" +# 32889 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32653 "parser_cocci_menhir.ml" +# 32895 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32690,17 +32932,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 32694 "parser_cocci_menhir.ml" +# 32936 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 47 "parser_cocci_menhir.mly" (string) -# 32699 "parser_cocci_menhir.ml" +# 32941 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let r1 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32704 "parser_cocci_menhir.ml" +# 32946 "parser_cocci_menhir.ml" ) = Obj.magic r1 in let _startpos = _startpos_r1_ in let _endpos = _endpos_m_ in @@ -32712,33 +32954,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p = p0 in let r = r0 in -# 478 "parser_cocci_menhir.mly" +# 485 "parser_cocci_menhir.mly" ( let nm = (r,P.id2name p) in (* this is only possible when we are in a metavar decl. Otherwise, it will be represented already as a MetaType *) let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), Ast0.Impure (*will be ignored*))) ) -# 32723 "parser_cocci_menhir.ml" +# 32965 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 32729 "parser_cocci_menhir.ml" +# 32971 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32736 "parser_cocci_menhir.ml" +# 32978 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32742 "parser_cocci_menhir.ml" +# 32984 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32770,12 +33012,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 32774 "parser_cocci_menhir.ml" +# 33016 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32779 "parser_cocci_menhir.ml" +# 33021 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32785,28 +33027,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 485 "parser_cocci_menhir.mly" +# 492 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 32791 "parser_cocci_menhir.ml" +# 33033 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 32797 "parser_cocci_menhir.ml" +# 33039 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32804 "parser_cocci_menhir.ml" +# 33046 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32810 "parser_cocci_menhir.ml" +# 33052 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32843,17 +33085,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 32847 "parser_cocci_menhir.ml" +# 33089 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 32852 "parser_cocci_menhir.ml" +# 33094 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32857 "parser_cocci_menhir.ml" +# 33099 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32865,31 +33107,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty2 = ty20 in let ty1 = ty10 in -# 487 "parser_cocci_menhir.mly" +# 494 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 32874 "parser_cocci_menhir.ml" +# 33116 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 32880 "parser_cocci_menhir.ml" +# 33122 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32887 "parser_cocci_menhir.ml" +# 33129 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32893 "parser_cocci_menhir.ml" +# 33135 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32916,7 +33158,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 32920 "parser_cocci_menhir.ml" +# 33162 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -32925,28 +33167,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 469 "parser_cocci_menhir.mly" +# 476 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 32931 "parser_cocci_menhir.ml" +# 33173 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 32937 "parser_cocci_menhir.ml" +# 33179 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32944 "parser_cocci_menhir.ml" +# 33186 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32950 "parser_cocci_menhir.ml" +# 33192 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32973,7 +33215,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 32977 "parser_cocci_menhir.ml" +# 33219 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -32982,28 +33224,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 471 "parser_cocci_menhir.mly" +# 478 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 32988 "parser_cocci_menhir.ml" +# 33230 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 32994 "parser_cocci_menhir.ml" +# 33236 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33001 "parser_cocci_menhir.ml" +# 33243 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33007 "parser_cocci_menhir.ml" +# 33249 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33030,7 +33272,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 33034 "parser_cocci_menhir.ml" +# 33276 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -33039,28 +33281,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 473 "parser_cocci_menhir.mly" +# 480 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 33045 "parser_cocci_menhir.ml" +# 33287 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 33051 "parser_cocci_menhir.ml" +# 33293 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33058 "parser_cocci_menhir.ml" +# 33300 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33064 "parser_cocci_menhir.ml" +# 33306 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33087,7 +33329,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 33091 "parser_cocci_menhir.ml" +# 33333 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let _startpos = _startpos_p00_ in let _endpos = _endpos_m_ in @@ -33096,29 +33338,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 475 "parser_cocci_menhir.mly" +# 482 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 33103 "parser_cocci_menhir.ml" +# 33345 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 33109 "parser_cocci_menhir.ml" +# 33351 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33116 "parser_cocci_menhir.ml" +# 33358 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33122 "parser_cocci_menhir.ml" +# 33364 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33154,12 +33396,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 33158 "parser_cocci_menhir.ml" +# 33400 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 47 "parser_cocci_menhir.mly" (string) -# 33163 "parser_cocci_menhir.ml" +# 33405 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let _startpos = _startpos_r00_ in let _endpos = _endpos_m_ in @@ -33170,33 +33412,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p = p0 in let r = r0 in -# 478 "parser_cocci_menhir.mly" +# 485 "parser_cocci_menhir.mly" ( let nm = (r,P.id2name p) in (* this is only possible when we are in a metavar decl. Otherwise, it will be represented already as a MetaType *) let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), Ast0.Impure (*will be ignored*))) ) -# 33181 "parser_cocci_menhir.ml" +# 33423 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 33187 "parser_cocci_menhir.ml" +# 33429 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33194 "parser_cocci_menhir.ml" +# 33436 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33200 "parser_cocci_menhir.ml" +# 33442 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33223,7 +33465,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 33227 "parser_cocci_menhir.ml" +# 33469 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -33232,28 +33474,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 485 "parser_cocci_menhir.mly" +# 492 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 33238 "parser_cocci_menhir.ml" +# 33480 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 33244 "parser_cocci_menhir.ml" +# 33486 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33251 "parser_cocci_menhir.ml" +# 33493 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33257 "parser_cocci_menhir.ml" +# 33499 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33285,12 +33527,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 33289 "parser_cocci_menhir.ml" +# 33531 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 33294 "parser_cocci_menhir.ml" +# 33536 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let _startpos = _startpos_ty100_ in let _endpos = _endpos_m_ in @@ -33301,31 +33543,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty2 = ty20 in let ty1 = ty10 in -# 487 "parser_cocci_menhir.mly" +# 494 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 33310 "parser_cocci_menhir.ml" +# 33552 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 33316 "parser_cocci_menhir.ml" +# 33558 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33323 "parser_cocci_menhir.ml" +# 33565 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33329 "parser_cocci_menhir.ml" +# 33571 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33352,7 +33594,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 33356 "parser_cocci_menhir.ml" +# 33598 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -33361,28 +33603,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 495 "parser_cocci_menhir.mly" +# 502 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) -# 33367 "parser_cocci_menhir.ml" +# 33609 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 33373 "parser_cocci_menhir.ml" +# 33615 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33380 "parser_cocci_menhir.ml" +# 33622 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33386 "parser_cocci_menhir.ml" +# 33628 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33409,7 +33651,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 33413 "parser_cocci_menhir.ml" +# 33655 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -33418,28 +33660,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 497 "parser_cocci_menhir.mly" +# 504 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) -# 33424 "parser_cocci_menhir.ml" +# 33666 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 33430 "parser_cocci_menhir.ml" +# 33672 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33437 "parser_cocci_menhir.ml" +# 33679 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33443 "parser_cocci_menhir.ml" +# 33685 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33466,7 +33708,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 33470 "parser_cocci_menhir.ml" +# 33712 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -33475,28 +33717,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 499 "parser_cocci_menhir.mly" +# 506 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) -# 33481 "parser_cocci_menhir.ml" +# 33723 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 33487 "parser_cocci_menhir.ml" +# 33729 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33494 "parser_cocci_menhir.ml" +# 33736 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33500 "parser_cocci_menhir.ml" +# 33742 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33529,7 +33771,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s00 : ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 33533 "parser_cocci_menhir.ml" +# 33775 "parser_cocci_menhir.ml" ) = Obj.magic s00 in let _startpos = _startpos_s00_ in let _endpos = _endpos_m_ in @@ -33540,28 +33782,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let i = i0 in let s = s0 in -# 501 "parser_cocci_menhir.mly" +# 508 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) ) -# 33546 "parser_cocci_menhir.ml" +# 33788 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 33552 "parser_cocci_menhir.ml" +# 33794 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33559 "parser_cocci_menhir.ml" +# 33801 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33565 "parser_cocci_menhir.ml" +# 33807 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33601,28 +33843,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let i = i0 in let s = s0 in -# 503 "parser_cocci_menhir.mly" +# 510 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) -# 33607 "parser_cocci_menhir.ml" +# 33849 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 33613 "parser_cocci_menhir.ml" +# 33855 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33620 "parser_cocci_menhir.ml" +# 33862 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33626 "parser_cocci_menhir.ml" +# 33868 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33664,13 +33906,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 33668 "parser_cocci_menhir.ml" +# 33910 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 33674 "parser_cocci_menhir.ml" +# 33916 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let s00 : 'tv_struct_or_union = Obj.magic s00 in let _startpos = _startpos_s00_ in @@ -33689,36 +33931,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 33693 "parser_cocci_menhir.ml" +# 33935 "parser_cocci_menhir.ml" in -# 506 "parser_cocci_menhir.mly" +# 513 "parser_cocci_menhir.mly" ( (if i = None && !Data.in_iso then failwith "structures must be named in the iso file"); Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), P.clt2mcode "{" l, d, P.clt2mcode "}" r)) ) -# 33703 "parser_cocci_menhir.ml" +# 33945 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 33709 "parser_cocci_menhir.ml" +# 33951 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33716 "parser_cocci_menhir.ml" +# 33958 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33722 "parser_cocci_menhir.ml" +# 33964 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33765,13 +34007,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 33769 "parser_cocci_menhir.ml" +# 34011 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 33775 "parser_cocci_menhir.ml" +# 34017 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let x000 : 'tv_ident = Obj.magic x000 in let s00 : 'tv_struct_or_union = Obj.magic s00 in @@ -33794,36 +34036,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 33798 "parser_cocci_menhir.ml" +# 34040 "parser_cocci_menhir.ml" in -# 506 "parser_cocci_menhir.mly" +# 513 "parser_cocci_menhir.mly" ( (if i = None && !Data.in_iso then failwith "structures must be named in the iso file"); Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), P.clt2mcode "{" l, d, P.clt2mcode "}" r)) ) -# 33808 "parser_cocci_menhir.ml" +# 34050 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 33814 "parser_cocci_menhir.ml" +# 34056 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33821 "parser_cocci_menhir.ml" +# 34063 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33827 "parser_cocci_menhir.ml" +# 34069 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33865,18 +34107,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 33869 "parser_cocci_menhir.ml" +# 34111 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 33875 "parser_cocci_menhir.ml" +# 34117 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let s00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 33880 "parser_cocci_menhir.ml" +# 34122 "parser_cocci_menhir.ml" ) = Obj.magic s00 in let _startpos = _startpos_s00_ in let _endpos = _endpos_m_ in @@ -33891,30 +34133,30 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let l = l0 in let s = s0 in -# 512 "parser_cocci_menhir.mly" +# 519 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = s in let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) ) -# 33899 "parser_cocci_menhir.ml" +# 34141 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 33905 "parser_cocci_menhir.ml" +# 34147 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33912 "parser_cocci_menhir.ml" +# 34154 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33918 "parser_cocci_menhir.ml" +# 34160 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33941,7 +34183,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 33945 "parser_cocci_menhir.ml" +# 34187 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let _startpos = _startpos_p00_ in let _endpos = _endpos_m_ in @@ -33950,28 +34192,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 516 "parser_cocci_menhir.mly" +# 523 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) -# 33956 "parser_cocci_menhir.ml" +# 34198 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 33962 "parser_cocci_menhir.ml" +# 34204 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33969 "parser_cocci_menhir.ml" +# 34211 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33975 "parser_cocci_menhir.ml" +# 34217 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34008,12 +34250,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 34012 "parser_cocci_menhir.ml" +# 34254 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34017 "parser_cocci_menhir.ml" +# 34259 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34024,15 +34266,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 469 "parser_cocci_menhir.mly" +# 476 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 34030 "parser_cocci_menhir.ml" +# 34272 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 34036 "parser_cocci_menhir.ml" +# 34278 "parser_cocci_menhir.ml" in let cv = @@ -34040,13 +34282,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34044 "parser_cocci_menhir.ml" +# 34286 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34050 "parser_cocci_menhir.ml" +# 34292 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34083,12 +34325,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 34087 "parser_cocci_menhir.ml" +# 34329 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34092 "parser_cocci_menhir.ml" +# 34334 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34099,15 +34341,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 471 "parser_cocci_menhir.mly" +# 478 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 34105 "parser_cocci_menhir.ml" +# 34347 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 34111 "parser_cocci_menhir.ml" +# 34353 "parser_cocci_menhir.ml" in let cv = @@ -34115,13 +34357,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34119 "parser_cocci_menhir.ml" +# 34361 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34125 "parser_cocci_menhir.ml" +# 34367 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34158,12 +34400,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 34162 "parser_cocci_menhir.ml" +# 34404 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34167 "parser_cocci_menhir.ml" +# 34409 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34174,15 +34416,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 473 "parser_cocci_menhir.mly" +# 480 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 34180 "parser_cocci_menhir.ml" +# 34422 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 34186 "parser_cocci_menhir.ml" +# 34428 "parser_cocci_menhir.ml" in let cv = @@ -34190,13 +34432,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34194 "parser_cocci_menhir.ml" +# 34436 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34200 "parser_cocci_menhir.ml" +# 34442 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34233,12 +34475,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 34237 "parser_cocci_menhir.ml" +# 34479 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34242 "parser_cocci_menhir.ml" +# 34484 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34249,16 +34491,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 475 "parser_cocci_menhir.mly" +# 482 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 34256 "parser_cocci_menhir.ml" +# 34498 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 34262 "parser_cocci_menhir.ml" +# 34504 "parser_cocci_menhir.ml" in let cv = @@ -34266,13 +34508,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34270 "parser_cocci_menhir.ml" +# 34512 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34276 "parser_cocci_menhir.ml" +# 34518 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34318,17 +34560,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 34322 "parser_cocci_menhir.ml" +# 34564 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 47 "parser_cocci_menhir.mly" (string) -# 34327 "parser_cocci_menhir.ml" +# 34569 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let r1 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34332 "parser_cocci_menhir.ml" +# 34574 "parser_cocci_menhir.ml" ) = Obj.magic r1 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34341,20 +34583,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p = p0 in let r = r0 in -# 478 "parser_cocci_menhir.mly" +# 485 "parser_cocci_menhir.mly" ( let nm = (r,P.id2name p) in (* this is only possible when we are in a metavar decl. Otherwise, it will be represented already as a MetaType *) let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), Ast0.Impure (*will be ignored*))) ) -# 34352 "parser_cocci_menhir.ml" +# 34594 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 34358 "parser_cocci_menhir.ml" +# 34600 "parser_cocci_menhir.ml" in let cv = @@ -34362,13 +34604,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34366 "parser_cocci_menhir.ml" +# 34608 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34372 "parser_cocci_menhir.ml" +# 34614 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34405,12 +34647,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 34409 "parser_cocci_menhir.ml" +# 34651 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34414 "parser_cocci_menhir.ml" +# 34656 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34421,15 +34663,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 485 "parser_cocci_menhir.mly" +# 492 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 34427 "parser_cocci_menhir.ml" +# 34669 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 34433 "parser_cocci_menhir.ml" +# 34675 "parser_cocci_menhir.ml" in let cv = @@ -34437,13 +34679,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34441 "parser_cocci_menhir.ml" +# 34683 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34447 "parser_cocci_menhir.ml" +# 34689 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34485,17 +34727,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 34489 "parser_cocci_menhir.ml" +# 34731 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 34494 "parser_cocci_menhir.ml" +# 34736 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34499 "parser_cocci_menhir.ml" +# 34741 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34508,18 +34750,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty2 = ty20 in let ty1 = ty10 in -# 487 "parser_cocci_menhir.mly" +# 494 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 34517 "parser_cocci_menhir.ml" +# 34759 "parser_cocci_menhir.ml" in -# 521 "parser_cocci_menhir.mly" +# 528 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 34523 "parser_cocci_menhir.ml" +# 34765 "parser_cocci_menhir.ml" in let cv = @@ -34527,13 +34769,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34531 "parser_cocci_menhir.ml" +# 34773 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34537 "parser_cocci_menhir.ml" +# 34779 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34570,12 +34812,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 34574 "parser_cocci_menhir.ml" +# 34816 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34579 "parser_cocci_menhir.ml" +# 34821 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34586,15 +34828,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 469 "parser_cocci_menhir.mly" +# 476 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 34592 "parser_cocci_menhir.ml" +# 34834 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 34598 "parser_cocci_menhir.ml" +# 34840 "parser_cocci_menhir.ml" in let cv = @@ -34602,13 +34844,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34606 "parser_cocci_menhir.ml" +# 34848 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34612 "parser_cocci_menhir.ml" +# 34854 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34645,12 +34887,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 34649 "parser_cocci_menhir.ml" +# 34891 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34654 "parser_cocci_menhir.ml" +# 34896 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34661,15 +34903,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 471 "parser_cocci_menhir.mly" +# 478 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 34667 "parser_cocci_menhir.ml" +# 34909 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 34673 "parser_cocci_menhir.ml" +# 34915 "parser_cocci_menhir.ml" in let cv = @@ -34677,13 +34919,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34681 "parser_cocci_menhir.ml" +# 34923 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34687 "parser_cocci_menhir.ml" +# 34929 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34720,12 +34962,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 34724 "parser_cocci_menhir.ml" +# 34966 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34729 "parser_cocci_menhir.ml" +# 34971 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34736,15 +34978,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 473 "parser_cocci_menhir.mly" +# 480 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 34742 "parser_cocci_menhir.ml" +# 34984 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 34748 "parser_cocci_menhir.ml" +# 34990 "parser_cocci_menhir.ml" in let cv = @@ -34752,13 +34994,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34756 "parser_cocci_menhir.ml" +# 34998 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34762 "parser_cocci_menhir.ml" +# 35004 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34795,12 +35037,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 34799 "parser_cocci_menhir.ml" +# 35041 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34804 "parser_cocci_menhir.ml" +# 35046 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34811,16 +35053,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 475 "parser_cocci_menhir.mly" +# 482 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 34818 "parser_cocci_menhir.ml" +# 35060 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 34824 "parser_cocci_menhir.ml" +# 35066 "parser_cocci_menhir.ml" in let cv = @@ -34828,13 +35070,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34832 "parser_cocci_menhir.ml" +# 35074 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34838 "parser_cocci_menhir.ml" +# 35080 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34880,17 +35122,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 34884 "parser_cocci_menhir.ml" +# 35126 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 47 "parser_cocci_menhir.mly" (string) -# 34889 "parser_cocci_menhir.ml" +# 35131 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let r1 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34894 "parser_cocci_menhir.ml" +# 35136 "parser_cocci_menhir.ml" ) = Obj.magic r1 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34903,20 +35145,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p = p0 in let r = r0 in -# 478 "parser_cocci_menhir.mly" +# 485 "parser_cocci_menhir.mly" ( let nm = (r,P.id2name p) in (* this is only possible when we are in a metavar decl. Otherwise, it will be represented already as a MetaType *) let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), Ast0.Impure (*will be ignored*))) ) -# 34914 "parser_cocci_menhir.ml" +# 35156 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 34920 "parser_cocci_menhir.ml" +# 35162 "parser_cocci_menhir.ml" in let cv = @@ -34924,13 +35166,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34928 "parser_cocci_menhir.ml" +# 35170 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34934 "parser_cocci_menhir.ml" +# 35176 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34967,12 +35209,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 34971 "parser_cocci_menhir.ml" +# 35213 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34976 "parser_cocci_menhir.ml" +# 35218 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34983,15 +35225,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 485 "parser_cocci_menhir.mly" +# 492 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 34989 "parser_cocci_menhir.ml" +# 35231 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 34995 "parser_cocci_menhir.ml" +# 35237 "parser_cocci_menhir.ml" in let cv = @@ -34999,13 +35241,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35003 "parser_cocci_menhir.ml" +# 35245 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35009 "parser_cocci_menhir.ml" +# 35251 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35047,17 +35289,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 35051 "parser_cocci_menhir.ml" +# 35293 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 35056 "parser_cocci_menhir.ml" +# 35298 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let r0 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 35061 "parser_cocci_menhir.ml" +# 35303 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35070,18 +35312,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty2 = ty20 in let ty1 = ty10 in -# 487 "parser_cocci_menhir.mly" +# 494 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 35079 "parser_cocci_menhir.ml" +# 35321 "parser_cocci_menhir.ml" in -# 523 "parser_cocci_menhir.mly" +# 530 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 35085 "parser_cocci_menhir.ml" +# 35327 "parser_cocci_menhir.ml" in let cv = @@ -35089,13 +35331,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35093 "parser_cocci_menhir.ml" +# 35335 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35099 "parser_cocci_menhir.ml" +# 35341 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35127,7 +35369,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 35131 "parser_cocci_menhir.ml" +# 35373 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35137,15 +35379,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 469 "parser_cocci_menhir.mly" +# 476 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 35143 "parser_cocci_menhir.ml" +# 35385 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 35149 "parser_cocci_menhir.ml" +# 35391 "parser_cocci_menhir.ml" in let cv = @@ -35153,13 +35395,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35157 "parser_cocci_menhir.ml" +# 35399 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35163 "parser_cocci_menhir.ml" +# 35405 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35191,7 +35433,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 35195 "parser_cocci_menhir.ml" +# 35437 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35201,15 +35443,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 471 "parser_cocci_menhir.mly" +# 478 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 35207 "parser_cocci_menhir.ml" +# 35449 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 35213 "parser_cocci_menhir.ml" +# 35455 "parser_cocci_menhir.ml" in let cv = @@ -35217,13 +35459,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35221 "parser_cocci_menhir.ml" +# 35463 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35227 "parser_cocci_menhir.ml" +# 35469 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35255,7 +35497,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 35259 "parser_cocci_menhir.ml" +# 35501 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35265,15 +35507,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 473 "parser_cocci_menhir.mly" +# 480 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 35271 "parser_cocci_menhir.ml" +# 35513 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 35277 "parser_cocci_menhir.ml" +# 35519 "parser_cocci_menhir.ml" in let cv = @@ -35281,13 +35523,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35285 "parser_cocci_menhir.ml" +# 35527 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35291 "parser_cocci_menhir.ml" +# 35533 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35319,7 +35561,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 35323 "parser_cocci_menhir.ml" +# 35565 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35329,16 +35571,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 475 "parser_cocci_menhir.mly" +# 482 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 35336 "parser_cocci_menhir.ml" +# 35578 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 35342 "parser_cocci_menhir.ml" +# 35584 "parser_cocci_menhir.ml" in let cv = @@ -35346,13 +35588,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35350 "parser_cocci_menhir.ml" +# 35592 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35356 "parser_cocci_menhir.ml" +# 35598 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35393,12 +35635,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 35397 "parser_cocci_menhir.ml" +# 35639 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 47 "parser_cocci_menhir.mly" (string) -# 35402 "parser_cocci_menhir.ml" +# 35644 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35410,20 +35652,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p = p0 in let r = r0 in -# 478 "parser_cocci_menhir.mly" +# 485 "parser_cocci_menhir.mly" ( let nm = (r,P.id2name p) in (* this is only possible when we are in a metavar decl. Otherwise, it will be represented already as a MetaType *) let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), Ast0.Impure (*will be ignored*))) ) -# 35421 "parser_cocci_menhir.ml" +# 35663 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 35427 "parser_cocci_menhir.ml" +# 35669 "parser_cocci_menhir.ml" in let cv = @@ -35431,13 +35673,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35435 "parser_cocci_menhir.ml" +# 35677 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35441 "parser_cocci_menhir.ml" +# 35683 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35469,7 +35711,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 35473 "parser_cocci_menhir.ml" +# 35715 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35479,15 +35721,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 485 "parser_cocci_menhir.mly" +# 492 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 35485 "parser_cocci_menhir.ml" +# 35727 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 35491 "parser_cocci_menhir.ml" +# 35733 "parser_cocci_menhir.ml" in let cv = @@ -35495,13 +35737,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35499 "parser_cocci_menhir.ml" +# 35741 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35505 "parser_cocci_menhir.ml" +# 35747 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35538,12 +35780,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 35542 "parser_cocci_menhir.ml" +# 35784 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 35547 "parser_cocci_menhir.ml" +# 35789 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35555,18 +35797,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty2 = ty20 in let ty1 = ty10 in -# 487 "parser_cocci_menhir.mly" +# 494 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 35564 "parser_cocci_menhir.ml" +# 35806 "parser_cocci_menhir.ml" in -# 524 "parser_cocci_menhir.mly" +# 531 "parser_cocci_menhir.mly" ( ty ) -# 35570 "parser_cocci_menhir.ml" +# 35812 "parser_cocci_menhir.ml" in let cv = @@ -35574,13 +35816,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35578 "parser_cocci_menhir.ml" +# 35820 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35584 "parser_cocci_menhir.ml" +# 35826 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35612,7 +35854,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 35616 "parser_cocci_menhir.ml" +# 35858 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35622,15 +35864,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 495 "parser_cocci_menhir.mly" +# 502 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) -# 35628 "parser_cocci_menhir.ml" +# 35870 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 35634 "parser_cocci_menhir.ml" +# 35876 "parser_cocci_menhir.ml" in let cv = @@ -35638,13 +35880,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35642 "parser_cocci_menhir.ml" +# 35884 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35648 "parser_cocci_menhir.ml" +# 35890 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35676,7 +35918,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 35680 "parser_cocci_menhir.ml" +# 35922 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35686,15 +35928,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 497 "parser_cocci_menhir.mly" +# 504 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) -# 35692 "parser_cocci_menhir.ml" +# 35934 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 35698 "parser_cocci_menhir.ml" +# 35940 "parser_cocci_menhir.ml" in let cv = @@ -35702,13 +35944,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35706 "parser_cocci_menhir.ml" +# 35948 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35712 "parser_cocci_menhir.ml" +# 35954 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35740,7 +35982,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 35744 "parser_cocci_menhir.ml" +# 35986 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35750,15 +35992,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let ty = ty0 in -# 499 "parser_cocci_menhir.mly" +# 506 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) -# 35756 "parser_cocci_menhir.ml" +# 35998 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 35762 "parser_cocci_menhir.ml" +# 36004 "parser_cocci_menhir.ml" in let cv = @@ -35766,13 +36008,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35770 "parser_cocci_menhir.ml" +# 36012 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35776 "parser_cocci_menhir.ml" +# 36018 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35810,7 +36052,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s00 : ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 35814 "parser_cocci_menhir.ml" +# 36056 "parser_cocci_menhir.ml" ) = Obj.magic s00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35822,15 +36064,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let i = i0 in let s = s0 in -# 501 "parser_cocci_menhir.mly" +# 508 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) ) -# 35828 "parser_cocci_menhir.ml" +# 36070 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 35834 "parser_cocci_menhir.ml" +# 36076 "parser_cocci_menhir.ml" in let cv = @@ -35838,13 +36080,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35842 "parser_cocci_menhir.ml" +# 36084 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35848 "parser_cocci_menhir.ml" +# 36090 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35890,15 +36132,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let i = i0 in let s = s0 in -# 503 "parser_cocci_menhir.mly" +# 510 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) -# 35896 "parser_cocci_menhir.ml" +# 36138 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 35902 "parser_cocci_menhir.ml" +# 36144 "parser_cocci_menhir.ml" in let cv = @@ -35906,13 +36148,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35910 "parser_cocci_menhir.ml" +# 36152 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35916 "parser_cocci_menhir.ml" +# 36158 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35959,13 +36201,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 35963 "parser_cocci_menhir.ml" +# 36205 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 35969 "parser_cocci_menhir.ml" +# 36211 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let s00 : 'tv_struct_or_union = Obj.magic s00 in let x0 : 'tv_const_vol = Obj.magic x0 in @@ -35985,23 +36227,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 35989 "parser_cocci_menhir.ml" +# 36231 "parser_cocci_menhir.ml" in -# 506 "parser_cocci_menhir.mly" +# 513 "parser_cocci_menhir.mly" ( (if i = None && !Data.in_iso then failwith "structures must be named in the iso file"); Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), P.clt2mcode "{" l, d, P.clt2mcode "}" r)) ) -# 35999 "parser_cocci_menhir.ml" +# 36241 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 36005 "parser_cocci_menhir.ml" +# 36247 "parser_cocci_menhir.ml" in let cv = @@ -36009,13 +36251,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36013 "parser_cocci_menhir.ml" +# 36255 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36019 "parser_cocci_menhir.ml" +# 36261 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36067,13 +36309,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 36071 "parser_cocci_menhir.ml" +# 36313 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 36077 "parser_cocci_menhir.ml" +# 36319 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let x000 : 'tv_ident = Obj.magic x000 in let s00 : 'tv_struct_or_union = Obj.magic s00 in @@ -36097,23 +36339,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36101 "parser_cocci_menhir.ml" +# 36343 "parser_cocci_menhir.ml" in -# 506 "parser_cocci_menhir.mly" +# 513 "parser_cocci_menhir.mly" ( (if i = None && !Data.in_iso then failwith "structures must be named in the iso file"); Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), P.clt2mcode "{" l, d, P.clt2mcode "}" r)) ) -# 36111 "parser_cocci_menhir.ml" +# 36353 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 36117 "parser_cocci_menhir.ml" +# 36359 "parser_cocci_menhir.ml" in let cv = @@ -36121,13 +36363,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36125 "parser_cocci_menhir.ml" +# 36367 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36131 "parser_cocci_menhir.ml" +# 36373 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36174,18 +36416,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 36178 "parser_cocci_menhir.ml" +# 36420 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 36184 "parser_cocci_menhir.ml" +# 36426 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let s00 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 36189 "parser_cocci_menhir.ml" +# 36431 "parser_cocci_menhir.ml" ) = Obj.magic s00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36201,17 +36443,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let l = l0 in let s = s0 in -# 512 "parser_cocci_menhir.mly" +# 519 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = s in let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) ) -# 36209 "parser_cocci_menhir.ml" +# 36451 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 36215 "parser_cocci_menhir.ml" +# 36457 "parser_cocci_menhir.ml" in let cv = @@ -36219,13 +36461,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36223 "parser_cocci_menhir.ml" +# 36465 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36229 "parser_cocci_menhir.ml" +# 36471 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36257,7 +36499,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 36261 "parser_cocci_menhir.ml" +# 36503 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36267,15 +36509,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty = let p = p0 in -# 516 "parser_cocci_menhir.mly" +# 523 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) -# 36273 "parser_cocci_menhir.ml" +# 36515 "parser_cocci_menhir.ml" in -# 525 "parser_cocci_menhir.mly" +# 532 "parser_cocci_menhir.mly" ( ty ) -# 36279 "parser_cocci_menhir.ml" +# 36521 "parser_cocci_menhir.ml" in let cv = @@ -36283,13 +36525,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36287 "parser_cocci_menhir.ml" +# 36529 "parser_cocci_menhir.ml" in -# 542 "parser_cocci_menhir.mly" +# 549 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36293 "parser_cocci_menhir.ml" +# 36535 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36320,22 +36562,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 36324 "parser_cocci_menhir.ml" +# 36566 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 36330 "parser_cocci_menhir.ml" +# 36572 "parser_cocci_menhir.ml" ) = Obj.magic lp in let _startpos = _startpos_lp_ in let _endpos = _endpos_rp_ in let _v : 'tv_typedef_ctype = -# 544 "parser_cocci_menhir.mly" +# 551 "parser_cocci_menhir.mly" ( let (mids,code) = t in Ast0.wrap (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) -# 36339 "parser_cocci_menhir.ml" +# 36581 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36357,9 +36599,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_typedef_ident = -# 1546 "parser_cocci_menhir.mly" +# 1599 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.TypeName(P.id2mcode _1)) ) -# 36363 "parser_cocci_menhir.ml" +# 36605 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36380,15 +36622,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 36384 "parser_cocci_menhir.ml" +# 36626 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_typedef_ident = -# 1548 "parser_cocci_menhir.mly" +# 1601 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = _1 in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 36392 "parser_cocci_menhir.ml" +# 36634 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36410,9 +36652,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1284 "parser_cocci_menhir.mly" +# 1291 "parser_cocci_menhir.mly" ( _1 ) -# 36416 "parser_cocci_menhir.ml" +# 36658 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36439,14 +36681,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 36443 "parser_cocci_menhir.ml" +# 36685 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1286 "parser_cocci_menhir.mly" +# 1293 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 36450 "parser_cocci_menhir.ml" +# 36692 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36473,14 +36715,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 36477 "parser_cocci_menhir.ml" +# 36719 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1288 "parser_cocci_menhir.mly" +# 1295 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 36484 "parser_cocci_menhir.ml" +# 36726 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36508,9 +36750,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1290 "parser_cocci_menhir.mly" +# 1297 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 36514 "parser_cocci_menhir.ml" +# 36756 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36537,15 +36779,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 36541 "parser_cocci_menhir.ml" +# 36783 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1292 "parser_cocci_menhir.mly" +# 1299 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 36549 "parser_cocci_menhir.ml" +# 36791 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36572,14 +36814,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 36576 "parser_cocci_menhir.ml" +# 36818 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1295 "parser_cocci_menhir.mly" +# 1302 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 36583 "parser_cocci_menhir.ml" +# 36825 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36615,27 +36857,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 36619 "parser_cocci_menhir.ml" +# 36861 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 36625 "parser_cocci_menhir.ml" +# 36867 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 36630 "parser_cocci_menhir.ml" +# 36872 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1297 "parser_cocci_menhir.mly" +# 1304 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 36639 "parser_cocci_menhir.ml" +# 36881 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36657,9 +36899,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1284 "parser_cocci_menhir.mly" +# 1291 "parser_cocci_menhir.mly" ( _1 ) -# 36663 "parser_cocci_menhir.ml" +# 36905 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36686,14 +36928,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 36690 "parser_cocci_menhir.ml" +# 36932 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1286 "parser_cocci_menhir.mly" +# 1293 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 36697 "parser_cocci_menhir.ml" +# 36939 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36720,14 +36962,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 36724 "parser_cocci_menhir.ml" +# 36966 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1288 "parser_cocci_menhir.mly" +# 1295 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 36731 "parser_cocci_menhir.ml" +# 36973 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36755,9 +36997,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1290 "parser_cocci_menhir.mly" +# 1297 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 36761 "parser_cocci_menhir.ml" +# 37003 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36784,15 +37026,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 36788 "parser_cocci_menhir.ml" +# 37030 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1292 "parser_cocci_menhir.mly" +# 1299 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 36796 "parser_cocci_menhir.ml" +# 37038 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36819,14 +37061,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 36823 "parser_cocci_menhir.ml" +# 37065 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1295 "parser_cocci_menhir.mly" +# 1302 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 36830 "parser_cocci_menhir.ml" +# 37072 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36862,27 +37104,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 36866 "parser_cocci_menhir.ml" +# 37108 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 36872 "parser_cocci_menhir.ml" +# 37114 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 36877 "parser_cocci_menhir.ml" +# 37119 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1297 "parser_cocci_menhir.mly" +# 1304 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 36886 "parser_cocci_menhir.ml" +# 37128 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36904,9 +37146,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1284 "parser_cocci_menhir.mly" +# 1291 "parser_cocci_menhir.mly" ( _1 ) -# 36910 "parser_cocci_menhir.ml" +# 37152 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36933,14 +37175,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 36937 "parser_cocci_menhir.ml" +# 37179 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1286 "parser_cocci_menhir.mly" +# 1293 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 36944 "parser_cocci_menhir.ml" +# 37186 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36967,14 +37209,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 36971 "parser_cocci_menhir.ml" +# 37213 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1288 "parser_cocci_menhir.mly" +# 1295 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 36978 "parser_cocci_menhir.ml" +# 37220 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37002,9 +37244,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1290 "parser_cocci_menhir.mly" +# 1297 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 37008 "parser_cocci_menhir.ml" +# 37250 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37031,15 +37273,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 37035 "parser_cocci_menhir.ml" +# 37277 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1292 "parser_cocci_menhir.mly" +# 1299 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 37043 "parser_cocci_menhir.ml" +# 37285 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37066,14 +37308,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 37070 "parser_cocci_menhir.ml" +# 37312 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1295 "parser_cocci_menhir.mly" +# 1302 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 37077 "parser_cocci_menhir.ml" +# 37319 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37109,27 +37351,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 37113 "parser_cocci_menhir.ml" +# 37355 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 37119 "parser_cocci_menhir.ml" +# 37361 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 37124 "parser_cocci_menhir.ml" +# 37366 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1297 "parser_cocci_menhir.mly" +# 1304 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 37133 "parser_cocci_menhir.ml" +# 37375 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37151,9 +37393,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1284 "parser_cocci_menhir.mly" +# 1291 "parser_cocci_menhir.mly" ( _1 ) -# 37157 "parser_cocci_menhir.ml" +# 37399 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37180,14 +37422,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 37184 "parser_cocci_menhir.ml" +# 37426 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1286 "parser_cocci_menhir.mly" +# 1293 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 37191 "parser_cocci_menhir.ml" +# 37433 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37214,14 +37456,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 37218 "parser_cocci_menhir.ml" +# 37460 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1288 "parser_cocci_menhir.mly" +# 1295 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 37225 "parser_cocci_menhir.ml" +# 37467 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37249,9 +37491,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1290 "parser_cocci_menhir.mly" +# 1297 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 37255 "parser_cocci_menhir.ml" +# 37497 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37278,15 +37520,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 37282 "parser_cocci_menhir.ml" +# 37524 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1292 "parser_cocci_menhir.mly" +# 1299 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 37290 "parser_cocci_menhir.ml" +# 37532 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37313,14 +37555,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 37317 "parser_cocci_menhir.ml" +# 37559 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1295 "parser_cocci_menhir.mly" +# 1302 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 37324 "parser_cocci_menhir.ml" +# 37566 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37356,27 +37598,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 37360 "parser_cocci_menhir.ml" +# 37602 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 37366 "parser_cocci_menhir.ml" +# 37608 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 37371 "parser_cocci_menhir.ml" +# 37613 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1297 "parser_cocci_menhir.mly" +# 1304 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 37380 "parser_cocci_menhir.ml" +# 37622 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37397,14 +37639,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 93 "parser_cocci_menhir.mly" (Data.clt) -# 37401 "parser_cocci_menhir.ml" +# 37643 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1301 "parser_cocci_menhir.mly" +# 1308 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.GetRef _1 ) -# 37408 "parser_cocci_menhir.ml" +# 37650 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37425,14 +37667,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 37429 "parser_cocci_menhir.ml" +# 37671 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1302 "parser_cocci_menhir.mly" +# 1309 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.DeRef _1 ) -# 37436 "parser_cocci_menhir.ml" +# 37678 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37453,14 +37695,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 37457 "parser_cocci_menhir.ml" +# 37699 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1303 "parser_cocci_menhir.mly" +# 1310 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.UnPlus _1 ) -# 37464 "parser_cocci_menhir.ml" +# 37706 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37481,14 +37723,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 37485 "parser_cocci_menhir.ml" +# 37727 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1304 "parser_cocci_menhir.mly" +# 1311 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.UnMinus _1 ) -# 37492 "parser_cocci_menhir.ml" +# 37734 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37509,14 +37751,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 37513 "parser_cocci_menhir.ml" +# 37755 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1305 "parser_cocci_menhir.mly" +# 1312 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Tilde _1 ) -# 37520 "parser_cocci_menhir.ml" +# 37762 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37544,9 +37786,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_when_start = -# 1766 "parser_cocci_menhir.mly" +# 1819 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS((Ast0.wrap(Ast0.Exp(_1)))::_2)) ) -# 37550 "parser_cocci_menhir.ml" +# 37792 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37574,9 +37816,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_when_start = -# 1768 "parser_cocci_menhir.mly" +# 1821 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS(_1@_2)) ) -# 37580 "parser_cocci_menhir.ml" +# 37822 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37598,9 +37840,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_w_ in let _endpos = _endpos_w_ in let _v : 'tv_whenppdecs = -# 887 "parser_cocci_menhir.mly" +# 894 "parser_cocci_menhir.mly" ( w ) -# 37604 "parser_cocci_menhir.ml" +# 37846 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37634,9 +37876,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = -# 1834 "parser_cocci_menhir.mly" +# 1887 "parser_cocci_menhir.mly" ( [Ast0.WhenNot w] ) -# 37640 "parser_cocci_menhir.ml" +# 37882 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37670,9 +37912,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = -# 1835 "parser_cocci_menhir.mly" +# 1888 "parser_cocci_menhir.mly" ( [Ast0.WhenAlways w] ) -# 37676 "parser_cocci_menhir.ml" +# 37918 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37702,9 +37944,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = -# 1837 "parser_cocci_menhir.mly" +# 1890 "parser_cocci_menhir.mly" ( List.map (function x -> Ast0.WhenModifier(x)) _2 ) -# 37708 "parser_cocci_menhir.ml" +# 37950 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37738,9 +37980,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = -# 1838 "parser_cocci_menhir.mly" +# 1891 "parser_cocci_menhir.mly" ( [Ast0.WhenNotTrue e] ) -# 37744 "parser_cocci_menhir.ml" +# 37986 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37774,9 +38016,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = -# 1839 "parser_cocci_menhir.mly" +# 1892 "parser_cocci_menhir.mly" ( [Ast0.WhenNotFalse e] ) -# 37780 "parser_cocci_menhir.ml" +# 38022 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37797,98 +38039,98 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rec script_meta_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1784 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1794 lexer lexbuf) : ( # 159 "parser_cocci_menhir.mly" (string * (string * string)) -# 37804 "parser_cocci_menhir.ml" +# 38046 "parser_cocci_menhir.ml" )) and rule_name = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1714 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1724 lexer lexbuf) : ( # 153 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 37812 "parser_cocci_menhir.ml" +# 38054 "parser_cocci_menhir.ml" )) and reinit = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1712 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1722 lexer lexbuf) : ( # 131 "parser_cocci_menhir.mly" (unit) -# 37820 "parser_cocci_menhir.ml" +# 38062 "parser_cocci_menhir.ml" )) and plus_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1676 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1686 lexer lexbuf) : ( # 140 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 37828 "parser_cocci_menhir.ml" +# 38070 "parser_cocci_menhir.ml" )) and plus_exp_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1668 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1678 lexer lexbuf) : ( # 143 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 37836 "parser_cocci_menhir.ml" +# 38078 "parser_cocci_menhir.ml" )) and never_used = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1662 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1672 lexer lexbuf) : ( # 168 "parser_cocci_menhir.mly" (unit) -# 37844 "parser_cocci_menhir.ml" +# 38086 "parser_cocci_menhir.ml" )) and minus_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1582 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1592 lexer lexbuf) : ( # 134 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 37852 "parser_cocci_menhir.ml" +# 38094 "parser_cocci_menhir.ml" )) and minus_exp_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1570 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1580 lexer lexbuf) : ( # 137 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 37860 "parser_cocci_menhir.ml" +# 38102 "parser_cocci_menhir.ml" )) and meta_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1567 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1577 lexer lexbuf) : ( # 157 "parser_cocci_menhir.mly" ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 37868 "parser_cocci_menhir.ml" +# 38110 "parser_cocci_menhir.ml" )) and iso_rule_name = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1563 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1573 lexer lexbuf) : ( # 149 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 37876 "parser_cocci_menhir.ml" +# 38118 "parser_cocci_menhir.ml" )) and iso_meta_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1332 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1338 lexer lexbuf) : ( # 165 "parser_cocci_menhir.mly" ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 37884 "parser_cocci_menhir.ml" +# 38126 "parser_cocci_menhir.ml" )) and iso_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 11 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 18 lexer lexbuf) : ( # 162 "parser_cocci_menhir.mly" (Ast0_cocci.anything list list) -# 37892 "parser_cocci_menhir.ml" +# 38134 "parser_cocci_menhir.ml" )) and include_main = @@ -37896,7 +38138,7 @@ and include_main = (Obj.magic (MenhirInterpreter.entry 0 lexer lexbuf) : ( # 146 "parser_cocci_menhir.mly" (Data.incl_iso list) -# 37900 "parser_cocci_menhir.ml" +# 38142 "parser_cocci_menhir.ml" )) diff --git a/parsing_cocci/parser_cocci_menhir.mli b/parsing_cocci/parser_cocci_menhir.mli index 4564263..1bf7515 100644 --- a/parsing_cocci/parser_cocci_menhir.mli +++ b/parsing_cocci/parser_cocci_menhir.mli @@ -31,10 +31,13 @@ type token = | TWhenTrue of (Data.clt) | TWhenFalse of (Data.clt) | TWhen of (Data.clt) + | TVirtual | TUsing | TTypedef | TTypeId of (string * Data.clt) | TType + | TTildeExclEq of (Data.clt) + | TTildeEq of (Data.clt) | TTilde of (Data.clt) | TSwitch of (Data.clt) | TString of (string * Data.clt) @@ -84,18 +87,18 @@ type token = | TMetaPos of (Parse_aux.pos_info) | TMetaParamList of (Parse_aux.list_info) | TMetaParam of (Parse_aux.info) - | TMetaLocalIdExp of (Parse_aux.typed_info) + | TMetaLocalIdExp of (Parse_aux.typed_expinfo) | TMetaLocalFunc of (Parse_aux.idinfo) | TMetaIterator of (Parse_aux.idinfo) | TMetaInit of (Parse_aux.info) - | TMetaIdExp of (Parse_aux.typed_info) + | TMetaIdExp of (Parse_aux.typed_expinfo) | TMetaId of (Parse_aux.idinfo) | TMetaFunc of (Parse_aux.idinfo) | TMetaExpList of (Parse_aux.list_info) - | TMetaExp of (Parse_aux.typed_info) + | TMetaExp of (Parse_aux.typed_expinfo) | TMetaErr of (Parse_aux.expinfo) | TMetaDeclarer of (Parse_aux.idinfo) - | TMetaConst of (Parse_aux.typed_info) + | TMetaConst of (Parse_aux.typed_expinfo) | TMPtVirg | TLogOp of (Ast_cocci.logicalOp * Data.clt) | TLocal diff --git a/parsing_cocci/parser_cocci_menhir.mly b/parsing_cocci/parser_cocci_menhir.mly index 84bd678..98e1858 100644 --- a/parsing_cocci/parser_cocci_menhir.mly +++ b/parsing_cocci/parser_cocci_menhir.mly @@ -1,23 +1,23 @@ /* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*/ + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + */ %{ @@ -43,7 +43,7 @@ module P = Parse_aux %token TPure TContext TGenerated %token TTypedef TDeclarer TIterator TName TPosition TPosAny %token TUsing TDisable TExtends TDepends TOn TEver TNever TExists TForall -%token TScript TInitialize TFinalize TNothing +%token TScript TInitialize TFinalize TNothing TVirtual %token TRuleName %token Tchar Tshort Tint Tdouble Tfloat Tlong @@ -58,14 +58,14 @@ module P = Parse_aux %token TBreak TContinue TGoto TSizeof TFunDecl %token TIdent TTypeId TDeclarerId TIteratorId TPragma -%token TMetaId TMetaFunc TMetaLocalFunc -%token TMetaIterator TMetaDeclarer -%token TMetaErr -%token TMetaParam TMetaStm TMetaStmList TMetaType -%token TMetaInit -%token TMetaParamList TMetaExpList -%token TMetaExp TMetaIdExp TMetaLocalIdExp TMetaConst -%token TMetaPos +%token TMetaId TMetaFunc TMetaLocalFunc +%token TMetaIterator TMetaDeclarer +%token TMetaErr +%token TMetaParam TMetaStm TMetaStmList TMetaType +%token TMetaInit +%token TMetaParamList TMetaExpList +%token TMetaExp TMetaIdExp TMetaLocalIdExp TMetaConst +%token TMetaPos %token TArob TArobArob TPArob %token TScriptData @@ -91,7 +91,7 @@ module P = Parse_aux %token TOr %token TXor %token TAnd -%token TEqEq TNotEq +%token TEqEq TNotEq TTildeEq TTildeExclEq %token TLogOp /* TInf TSup TInfEq TSupEq */ %token TShOp /* TShl TShr */ %token TDmOp /* TDiv TMod */ @@ -256,6 +256,13 @@ incl: TIncludeL { let (x,_) = $1 in Data.Include(x) } | TUsing TString { Data.Iso(Common.Left(P.id2name $2)) } | TUsing TPathIsoFile { Data.Iso(Common.Right $2) } +| TVirtual comma_list(pure_ident) + { let names = List.map P.id2name $2 in + (* ensure that the names of virtual and real rules don't overlap *) + List.iter + (function name -> Hashtbl.add Data.all_metadecls name []) + names; + Data.Virt(names) } metadec: ar=arity ispure=pure @@ -266,18 +273,18 @@ metadec: { P.create_fresh_metadec kindfn ids } | ar=arity ispure=pure kindfn=metakind_atomic - ids=comma_list(pure_ident_or_meta_ident_with_not_eq(not_eq)) TMPtVirg - { P.create_metadec_ne ar ispure kindfn ids } + ids=comma_list(pure_ident_or_meta_ident_with_idconstraint(re_or_not_eqid)) TMPtVirg + { P.create_metadec_with_constraints ar ispure kindfn ids } | ar=arity ispure=pure kindfn=metakind_atomic_expi - ids=comma_list(pure_ident_or_meta_ident_with_not_eq(not_eqe)) TMPtVirg - { P.create_metadec_ne ar ispure kindfn ids } + ids=comma_list(pure_ident_or_meta_ident_with_econstraint(re_or_not_eqe)) TMPtVirg + { P.create_metadec_with_constraints ar ispure kindfn ids } | ar=arity ispure=pure kindfn=metakind_atomic_expe - ids=comma_list(pure_ident_or_meta_ident_with_not_eq(not_ceq)) TMPtVirg - { P.create_metadec_ne ar ispure kindfn ids } + ids=comma_list(pure_ident_or_meta_ident_with_x_eq(not_ceq)) TMPtVirg + { P.create_metadec_with_constraints ar ispure kindfn ids } | ar=arity TPosition a=option(TPosAny) - ids=comma_list(pure_ident_or_meta_ident_with_not_eq(not_pos)) TMPtVirg + ids=comma_list(pure_ident_or_meta_ident_with_x_eq(not_pos)) TMPtVirg (* pb: position variables can't be inherited from normal rules, and then there is no way to inherit from a generated rule, so there is no point to have a position variable *) @@ -287,7 +294,7 @@ metadec: let tok = check_meta(Ast.MetaPosDecl(arity,name)) in let any = match a with None -> Ast.PER | Some _ -> Ast.ALL in !Data.add_pos_meta name constraints any; tok in - P.create_metadec_ne ar false kindfn ids } + P.create_metadec_with_constraints ar false kindfn ids } | ar=arity ispure=pure TParameter Tlist TOCro id=pure_ident_or_meta_ident TCCro ids=comma_list(pure_ident_or_meta_ident) TMPtVirg @@ -358,7 +365,6 @@ metadec: then (!Data.add_iterator_name name; []) else raise (Semantic_cocci.Semantic "bad iterator")) } - %inline metakind_atomic: TIdentifier { (fun arity name pure check_meta constraints -> @@ -425,7 +431,7 @@ metadec: TExpression { (fun arity name pure check_meta constraints -> let tok = check_meta(Ast.MetaExpDecl(arity,name,None)) in - !Data.add_exp_meta None name constraints pure; tok) } + !Data.add_exp_meta None name (Ast0.NotExpCstrt constraints) pure; tok) } | vl=meta_exp_type // no error if use $1 but doesn't type check { (fun arity name pure check_meta constraints -> let ty = Some vl in @@ -445,7 +451,8 @@ metadec: | _ -> ()) constraints; let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in - !Data.add_exp_meta ty name constraints pure; tok) } + !Data.add_exp_meta ty name (Ast0.NotExpCstrt constraints) pure; tok) + } meta_exp_type: @@ -1084,12 +1091,12 @@ initialize2: | ident TDotDot initialize2 { Ast0.wrap(Ast0.InitGccName($1,P.clt2mcode ":" $2,$3)) } /* in old kernel */ -designator: - | TDot ident - { Ast0.DesignatorField (P.clt2mcode "." $1,$2) } - | TOCro eexpr TCCro +designator: + | TDot ident + { Ast0.DesignatorField (P.clt2mcode "." $1,$2) } + | TOCro eexpr TCCro { Ast0.DesignatorIndex (P.clt2mcode "[" $1,$2,P.clt2mcode "]" $3) } - | TOCro eexpr TEllipsis eexpr TCCro + | TOCro eexpr TEllipsis eexpr TCCro { Ast0.DesignatorRange (P.clt2mcode "[" $1,$2,P.clt2mcode "..." $3, $4,P.clt2mcode "]" $5) } @@ -1425,10 +1432,49 @@ seed_elem: P.check_meta(Ast.MetaIdDecl(Ast.NONE,nm)); Ast.SeedId nm } -pure_ident_or_meta_ident_with_not_eq(not_eq): - i=pure_ident_or_meta_ident l=loption(not_eq) { (i,l) } +pure_ident_or_meta_ident_with_x_eq(x_eq): + i=pure_ident_or_meta_ident l=loption(x_eq) + { + (i, l) + } + +pure_ident_or_meta_ident_with_econstraint(x_eq): + i=pure_ident_or_meta_ident optc=option(x_eq) + { + match optc with + None -> (i, Ast0.NoConstraint) + | Some c -> (i, c) + } + +pure_ident_or_meta_ident_with_idconstraint(constraint_type): + i=pure_ident_or_meta_ident c=option(constraint_type) + { + match c with + None -> (i, Ast.IdNoConstraint) + | Some constraint_ -> (i,constraint_) + } + +re_or_not_eqid: + re=regexp_eqid {re} + | ne=not_eqid {ne} + +regexp_eqid: + TTildeEq re=TString + { (if !Data.in_iso + then failwith "constraints not allowed in iso file"); + (if !Data.in_generating + then failwith "constraints not allowed in a generated rule file"); + let (s,_) = re in Ast.IdRegExp (s,Str.regexp s) + } + | TTildeExclEq re=TString + { (if !Data.in_iso + then failwith "constraints not allowed in iso file"); + (if !Data.in_generating + then failwith "constraints not allowed in a generated rule file"); + let (s,_) = re in Ast.IdNotRegExp (s,Str.regexp s) + } -not_eq: +not_eqid: TNotEq i=pure_ident { (if !Data.in_iso then failwith "constraints not allowed in iso file"); @@ -1436,13 +1482,18 @@ not_eq: (* pb: constraints not stored with metavars; too lazy to search for them in the pattern *) then failwith "constraints not allowed in a generated rule file"); - [Ast0.wrap(Ast0.Id(P.id2mcode i))] } + Ast.IdNegIdSet([fst i]) } | TNotEq TOBrace l=comma_list(pure_ident) TCBrace { (if !Data.in_iso then failwith "constraints not allowed in iso file"); (if !Data.in_generating then failwith "constraints not allowed in a generated rule file"); - List.map (function i -> Ast0.wrap(Ast0.Id(P.id2mcode i))) l } + Ast.IdNegIdSet(List.map fst l) + } + +re_or_not_eqe: + re=regexp_eqid {Ast0.NotIdCstrt (re)} + | ne=not_eqe {Ast0.NotExpCstrt (ne)} not_eqe: TNotEq i=pure_ident @@ -1450,7 +1501,8 @@ not_eqe: then failwith "constraints not allowed in iso file"); (if !Data.in_generating then failwith "constraints not allowed in a generated rule file"); - [Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))] } + [Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))] + } | TNotEq TOBrace l=comma_list(pure_ident) TCBrace { (if !Data.in_iso then failwith "constraints not allowed in iso file"); @@ -1458,8 +1510,9 @@ not_eqe: then failwith "constraints not allowed in a generated rule file"); List.map (function i -> - Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))) - l } + Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))) + l + } not_ceq: TNotEq i=ident_or_const diff --git a/parsing_cocci/plus.ml b/parsing_cocci/plus.ml index d7d3bf8..4faa771 100644 --- a/parsing_cocci/plus.ml +++ b/parsing_cocci/plus.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* The plus fragments are converted to a list of lists of lists. diff --git a/parsing_cocci/plus.mli b/parsing_cocci/plus.mli index 512f516..82c6d99 100644 --- a/parsing_cocci/plus.mli +++ b/parsing_cocci/plus.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val plus : Ast_cocci.rule -> (Ast_cocci.anything * int * int * int * int) list list list diff --git a/parsing_cocci/pretty_print_cocci.ml b/parsing_cocci/pretty_print_cocci.ml index 8b0bd44..0a23553 100644 --- a/parsing_cocci/pretty_print_cocci.ml +++ b/parsing_cocci/pretty_print_cocci.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Format @@ -74,9 +74,9 @@ and print_anything_list = function let print_around printer term = function Ast.NOTHING -> printer term - | Ast.BEFORE(bef) -> print_anything "<<< " bef; printer term - | Ast.AFTER(aft) -> printer term; print_anything ">>> " aft - | Ast.BEFOREAFTER(bef,aft) -> + | Ast.BEFORE(bef,_) -> print_anything "<<< " bef; printer term + | Ast.AFTER(aft,_) -> printer term; print_anything ">>> " aft + | Ast.BEFOREAFTER(bef,aft,_) -> print_anything "<<< " bef; printer term; print_anything ">>> " aft let print_string_befaft fn x info = @@ -107,7 +107,7 @@ let mcode fn = function let fn x = fn x; print_pos pos in print_around fn x plus_streams else (fn x; print_pos pos) - | (x, info, Ast.PLUS, pos) -> + | (x, info, Ast.PLUS _, pos) -> let fn x = fn x; print_pos pos in print_string_befaft fn x info @@ -117,7 +117,7 @@ let print_mcodekind = function print_anything ">>> " plus_stream | Ast.CONTEXT(_,plus_streams) -> print_around (function _ -> print_string "CONTEXT") () plus_streams - | Ast.PLUS -> print_string "PLUS" + | Ast.PLUS _ -> print_string "PLUS" (* --------------------------------------------------------------------- *) (* --------------------------------------------------------------------- *) @@ -162,17 +162,28 @@ let print_type keep info = function print_string " inherited:"; print_bool inherited;*) print_string " */"*) +(* --------------------------------------------------------------------- *) +(* Contraint on Identifier and Function *) +(* FIXME: Not called at the moment *) + +let idconstraint c = + match c with + Ast.IdNoConstraint -> print_string "/* No constraint */" + | Ast.IdNegIdSet ids -> List.iter (fun s -> print_string (" "^s)) ids + | Ast.IdRegExp (re,_) -> print_string "~= \""; print_string re; print_string "\"" + | Ast.IdNotRegExp (re,_) -> print_string "~!= \""; print_string re; print_string "\"" + (* --------------------------------------------------------------------- *) (* Identifier *) let rec ident i = match Ast.unwrap i with - Ast.Id(name) -> mcode print_string name - | Ast.MetaId(name,_,keep,inherited) -> mcode print_meta name - | Ast.MetaFunc(name,_,_,_) -> mcode print_meta name - | Ast.MetaLocalFunc(name,_,_,_) -> mcode print_meta name - | Ast.OptIdent(id) -> print_string "?"; ident id - | Ast.UniqueIdent(id) -> print_string "!"; ident id + Ast.Id(name) -> mcode print_string name + | Ast.MetaId(name,_,keep,inherited) -> mcode print_meta name + | Ast.MetaFunc(name,_,_,_) -> mcode print_meta name + | Ast.MetaLocalFunc(name,_,_,_) -> mcode print_meta name + | Ast.OptIdent(id) -> print_string "?"; ident id + | Ast.UniqueIdent(id) -> print_string "!"; ident id and print_unitary = function Type_cocci.Unitary -> print_string "unitary" diff --git a/parsing_cocci/pretty_print_cocci.mli b/parsing_cocci/pretty_print_cocci.mli index c06c941..bd36ad8 100644 --- a/parsing_cocci/pretty_print_cocci.mli +++ b/parsing_cocci/pretty_print_cocci.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val unparse : Ast_cocci.rule -> unit val unparse_to_string : Ast_cocci.rule -> string val expression : Ast_cocci.expression -> unit diff --git a/parsing_cocci/semantic_cocci.ml b/parsing_cocci/semantic_cocci.ml dissimilarity index 96% index 4e56730..fce6bd8 100644 --- a/parsing_cocci/semantic_cocci.ml +++ b/parsing_cocci/semantic_cocci.ml @@ -1,23 +1,23 @@ -(* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) - - -exception Semantic of string +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +exception Semantic of string diff --git a/parsing_cocci/simple_assignments.ml b/parsing_cocci/simple_assignments.ml index f7029ba..789244a 100644 --- a/parsing_cocci/simple_assignments.ml +++ b/parsing_cocci/simple_assignments.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module Ast0 = Ast0_cocci diff --git a/parsing_cocci/simple_assignments.mli b/parsing_cocci/simple_assignments.mli index e9d4c89..ca5d7b4 100644 --- a/parsing_cocci/simple_assignments.mli +++ b/parsing_cocci/simple_assignments.mli @@ -1 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val simple_assignments : Ast0_cocci.rule -> Ast0_cocci.rule diff --git a/parsing_cocci/single_statement.ml b/parsing_cocci/single_statement.ml index a7c5be3..ce72644 100644 --- a/parsing_cocci/single_statement.ml +++ b/parsing_cocci/single_statement.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* detect statements that are between dots in the minus code, because they @@ -45,7 +45,7 @@ let right_dots f l = let modif_before_mcode mc = match Ast0.get_mcode_mcodekind mc with Ast0.MINUS mc -> true (*conservative; don't want to hunt right for + code*) - | Ast0.PLUS -> failwith "not possible" + | Ast0.PLUS _ -> failwith "not possible" | Ast0.CONTEXT mc -> (match !mc with (Ast.BEFORE _,_,_) -> true @@ -55,7 +55,7 @@ let modif_before_mcode mc = let modif_after_mcodekind = function Ast0.MINUS mc -> true (*conservative; don't want to hunt right for + code*) - | Ast0.PLUS -> failwith "not possible" + | Ast0.PLUS _ -> failwith "not possible" | Ast0.CONTEXT mc -> (match !mc with (Ast.AFTER _,_,_) -> true @@ -74,14 +74,14 @@ let any_statements = let modif_before x = match Ast0.get_mcodekind x with - Ast0.PLUS -> failwith "not possible" + Ast0.PLUS _ -> failwith "not possible" | Ast0.MINUS mc -> (match !mc with (* do better for the common case of replacing a stmt by another one *) - ([[Ast.StatementTag(s)]],_) -> + ([[Ast.StatementTag(s)]],ti) -> (match Ast.unwrap s with Ast.IfThen(_,_,_) -> true (* potentially dangerous *) - | _ -> false) + | _ -> mc := ([[Ast.StatementTag(s)]],ti); false) | (_,_) -> true) | Ast0.CONTEXT mc | Ast0.MIXED mc -> (match !mc with @@ -91,15 +91,16 @@ let modif_before x = let modif_after x = match Ast0.get_mcodekind x with - Ast0.PLUS -> failwith "not possible" + Ast0.PLUS _ -> failwith "not possible" | Ast0.MINUS mc -> (match !mc with (* do better for the common case of replacing a stmt by another one *) - ([[Ast.StatementTag(s)]],_) -> + ([[Ast.StatementTag(s)]],ti) -> (match Ast.unwrap s with Ast.IfThen(_,_,_) -> true (* potentially dangerous *) - | _ -> false) - | (l,_) -> any_statements l) + | _ -> mc := ([[Ast.StatementTag(s)]],ti); false) + | (l,_) when any_statements l -> true + | (l,ti) -> mc := (l,ti); false) | Ast0.CONTEXT mc | Ast0.MIXED mc -> (match !mc with (Ast.AFTER _,_,_) -> true @@ -304,10 +305,10 @@ let rec adding_something s = Ast0.MINUS(mc) -> (match !mc with (* do better for the common case of replacing a stmt by another one *) - ([[Ast.StatementTag(s)]],_) -> + ([[Ast.StatementTag(s)]],ti) -> (match Ast.unwrap s with Ast.IfThen(_,_,_) -> true (* potentially dangerous *) - | _ -> false) + | _ -> mc := ([[Ast.StatementTag(s)]],ti); false) | (_,_) -> true) | Ast0.CONTEXT(mc) -> let (text,tinfo1,tinfo2) = !mc in @@ -406,28 +407,40 @@ let add_braces orig_s = | Ast0.CONTEXT(mc) -> let (text,tinfo1,tinfo2) = !mc in let new_text = + (* this is going to be a mess if we allow it to be iterable... + there would be one level of braces for every added things. + need to come up with something better, or just add {} in the + source code. *) match text with - Ast.BEFORE(bef) -> - Ast.BEFOREAFTER([Ast.mkToken "{"]::bef,[[Ast.mkToken "}"]]) - | Ast.AFTER(aft) -> - Ast.BEFOREAFTER([[Ast.mkToken "{"]],aft@[[Ast.mkToken "}"]]) - | Ast.BEFOREAFTER(bef,aft) -> - Ast.BEFOREAFTER([Ast.mkToken "{"]::bef,aft@[[Ast.mkToken "}"]]) + Ast.BEFORE(bef,_) -> + Ast.BEFOREAFTER([Ast.mkToken "{"]::bef,[[Ast.mkToken "}"]], + Ast.ONE) + | Ast.AFTER(aft,_) -> + Ast.BEFOREAFTER([[Ast.mkToken "{"]],aft@[[Ast.mkToken "}"]], + Ast.ONE) + | Ast.BEFOREAFTER(bef,aft,_) -> + Ast.BEFOREAFTER([Ast.mkToken "{"]::bef,aft@[[Ast.mkToken "}"]], + Ast.ONE) | Ast.NOTHING -> - Ast.BEFOREAFTER([[Ast.mkToken "{"]],[[Ast.mkToken "}"]]) in + Ast.BEFOREAFTER([[Ast.mkToken "{"]],[[Ast.mkToken "}"]], + Ast.ONE) in Ast0.CONTEXT(ref(new_text,tinfo1,tinfo2)) | Ast0.MIXED(mc) -> let (text,tinfo1,tinfo2) = !mc in let new_text = match text with - Ast.BEFORE(bef) -> - Ast.BEFOREAFTER([Ast.mkToken "{"]::bef,[[Ast.mkToken "}"]]) - | Ast.AFTER(aft) -> - Ast.BEFOREAFTER([[Ast.mkToken "{"]],aft@[[Ast.mkToken "}"]]) - | Ast.BEFOREAFTER(bef,aft) -> - Ast.BEFOREAFTER([Ast.mkToken "{"]::bef,aft@[[Ast.mkToken "}"]]) + Ast.BEFORE(bef,_) -> + Ast.BEFOREAFTER([Ast.mkToken "{"]::bef,[[Ast.mkToken "}"]], + Ast.ONE) + | Ast.AFTER(aft,_) -> + Ast.BEFOREAFTER([[Ast.mkToken "{"]],aft@[[Ast.mkToken "}"]], + Ast.ONE) + | Ast.BEFOREAFTER(bef,aft,_) -> + Ast.BEFOREAFTER([Ast.mkToken "{"]::bef,aft@[[Ast.mkToken "}"]], + Ast.ONE) | Ast.NOTHING -> - Ast.BEFOREAFTER([[Ast.mkToken "{"]],[[Ast.mkToken "}"]]) in + Ast.BEFOREAFTER([[Ast.mkToken "{"]],[[Ast.mkToken "}"]], + Ast.ONE) in Ast0.MIXED(ref(new_text,tinfo1,tinfo2)) | _ -> failwith "unexpected plus code" in Ast0.set_mcodekind s new_mcodekind; diff --git a/parsing_cocci/single_statement.mli b/parsing_cocci/single_statement.mli index eee3744..78e3644 100644 --- a/parsing_cocci/single_statement.mli +++ b/parsing_cocci/single_statement.mli @@ -1 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val single_statement : Ast0_cocci.rule -> Ast0_cocci.rule diff --git a/parsing_cocci/test.cocci b/parsing_cocci/test.cocci index 5683b49..2f14029 100644 --- a/parsing_cocci/test.cocci +++ b/parsing_cocci/test.cocci @@ -1,3 +1,23 @@ +// Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +// Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +// This file is part of Coccinelle. +// +// Coccinelle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, according to version 2 of the License. +// +// Coccinelle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Coccinelle. If not, see . +// +// The authors reserve the right to distribute this or future versions of +// Coccinelle under other licenses. + + @@ struct SHT sht; local function proc_info_func; diff --git a/parsing_cocci/test2.cocci b/parsing_cocci/test2.cocci index 62ec534..b0d3b62 100644 --- a/parsing_cocci/test2.cocci +++ b/parsing_cocci/test2.cocci @@ -1,3 +1,23 @@ +// Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +// Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +// This file is part of Coccinelle. +// +// Coccinelle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, according to version 2 of the License. +// +// Coccinelle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Coccinelle. If not, see . +// +// The authors reserve the right to distribute this or future versions of +// Coccinelle under other licenses. + + @@ struct SHT sht; local function proc_info_func; diff --git a/parsing_cocci/test_exps.ml b/parsing_cocci/test_exps.ml index 9dede4f..3c2c139 100644 --- a/parsing_cocci/test_exps.ml +++ b/parsing_cocci/test_exps.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module Ast = Ast_cocci diff --git a/parsing_cocci/test_exps.mli b/parsing_cocci/test_exps.mli index 29d5ced..f5dcb5e 100644 --- a/parsing_cocci/test_exps.mli +++ b/parsing_cocci/test_exps.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val process : Ast0_cocci.rule -> Ast0_cocci.rule val process_anything : Ast0_cocci.anything -> Ast0_cocci.anything diff --git a/parsing_cocci/top_level.ml b/parsing_cocci/top_level.ml index 271a543..dea5573 100644 --- a/parsing_cocci/top_level.ml +++ b/parsing_cocci/top_level.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* Reorganize the top level of a rule to be a list of either top-level diff --git a/parsing_cocci/top_level.mli b/parsing_cocci/top_level.mli index 1829d3e..f150d93 100644 --- a/parsing_cocci/top_level.mli +++ b/parsing_cocci/top_level.mli @@ -1 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val top_level : Ast0_cocci.rule -> Ast0_cocci.rule diff --git a/parsing_cocci/type_cocci.ml b/parsing_cocci/type_cocci.ml index e8b8e27..b4bd0a2 100644 --- a/parsing_cocci/type_cocci.ml +++ b/parsing_cocci/type_cocci.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* for metavariables in general, but here because needed for metatypes *) diff --git a/parsing_cocci/type_cocci.mli b/parsing_cocci/type_cocci.mli index 73185b0..6ebd07c 100644 --- a/parsing_cocci/type_cocci.mli +++ b/parsing_cocci/type_cocci.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + type inherited = bool (* true if inherited *) type keep_binding = Unitary (* need no info *) | Nonunitary (* need an env entry *) | Saved (* need a witness *) diff --git a/parsing_cocci/type_infer.ml b/parsing_cocci/type_infer.ml index 9539045..5d96ce6 100644 --- a/parsing_cocci/type_infer.ml +++ b/parsing_cocci/type_infer.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module T = Type_cocci @@ -124,151 +124,151 @@ let rec propagate_types env = let res = k e in let ty = match Ast0.unwrap e with - (* pad: the type of id is set in the ident visitor *) - Ast0.Ident(id) -> Ast0.set_type e res; res - | Ast0.Constant(const) -> - (match Ast0.unwrap_mcode const with - Ast.String(_) -> Some (T.Pointer(char_type)) - | Ast.Char(_) -> Some (char_type) - | Ast.Int(_) -> Some (int_type) - | Ast.Float(_) -> Some (float_type)) - (* pad: note that in C can do either ptr(...) or ( *ptr)(...) - * so I am not sure this code is enough. - *) - | Ast0.FunCall(fn,lp,args,rp) -> - (match Ast0.get_type fn with - Some (T.FunctionPointer(ty)) -> Some ty - | _ -> - (match Ast0.unwrap fn with - Ast0.Ident(id) -> - (match Ast0.unwrap id with - Ast0.Id(id) -> - if List.mem (Ast0.unwrap_mcode id) bool_functions - then Some(bool_type) - else None - | _ -> None) - | _ -> None)) - | Ast0.Assignment(exp1,op,exp2,_) -> - let ty = lub_type (Ast0.get_type exp1) (Ast0.get_type exp2) in - Ast0.set_type exp1 ty; Ast0.set_type exp2 ty; ty - | Ast0.CondExpr(exp1,why,Some exp2,colon,exp3) -> - let ty = lub_type (Ast0.get_type exp2) (Ast0.get_type exp3) in - Ast0.set_type exp2 ty; Ast0.set_type exp3 ty; ty - | Ast0.CondExpr(exp1,why,None,colon,exp3) -> Ast0.get_type exp3 - | Ast0.Postfix(exp,op) | Ast0.Infix(exp,op) -> (* op is dec or inc *) - Ast0.get_type exp - | Ast0.Unary(exp,op) -> - (match Ast0.unwrap_mcode op with - Ast.GetRef -> - (match Ast0.get_type exp with - None -> Some (T.Pointer(T.Unknown)) - | Some t -> Some (T.Pointer(t))) - | Ast.DeRef -> - (match Ast0.get_type exp with - Some (T.Pointer(t)) -> Some t - | _ -> None) - | Ast.UnPlus -> Ast0.get_type exp - | Ast.UnMinus -> Ast0.get_type exp - | Ast.Tilde -> Ast0.get_type exp - | Ast.Not -> Some(bool_type)) - | Ast0.Nested(exp1,op,exp2) -> failwith "nested in type inf not possible" - | Ast0.Binary(exp1,op,exp2) -> - let ty1 = Ast0.get_type exp1 in - let ty2 = Ast0.get_type exp2 in - let same_type = function - (None,None) -> Some (int_type) + (* pad: the type of id is set in the ident visitor *) + Ast0.Ident(id) -> Ast0.set_type e res; res + | Ast0.Constant(const) -> + (match Ast0.unwrap_mcode const with + Ast.String(_) -> Some (T.Pointer(char_type)) + | Ast.Char(_) -> Some (char_type) + | Ast.Int(_) -> Some (int_type) + | Ast.Float(_) -> Some (float_type)) + (* pad: note that in C can do either ptr(...) or ( *ptr)(...) + * so I am not sure this code is enough. + *) + | Ast0.FunCall(fn,lp,args,rp) -> + (match Ast0.get_type fn with + Some (T.FunctionPointer(ty)) -> Some ty + | _ -> + (match Ast0.unwrap fn with + Ast0.Ident(id) -> + (match Ast0.unwrap id with + Ast0.Id(id) -> + if List.mem (Ast0.unwrap_mcode id) bool_functions + then Some(bool_type) + else None + | _ -> None) + | _ -> None)) + | Ast0.Assignment(exp1,op,exp2,_) -> + let ty = lub_type (Ast0.get_type exp1) (Ast0.get_type exp2) in + Ast0.set_type exp1 ty; Ast0.set_type exp2 ty; ty + | Ast0.CondExpr(exp1,why,Some exp2,colon,exp3) -> + let ty = lub_type (Ast0.get_type exp2) (Ast0.get_type exp3) in + Ast0.set_type exp2 ty; Ast0.set_type exp3 ty; ty + | Ast0.CondExpr(exp1,why,None,colon,exp3) -> Ast0.get_type exp3 + | Ast0.Postfix(exp,op) | Ast0.Infix(exp,op) -> (* op is dec or inc *) + Ast0.get_type exp + | Ast0.Unary(exp,op) -> + (match Ast0.unwrap_mcode op with + Ast.GetRef -> + (match Ast0.get_type exp with + None -> Some (T.Pointer(T.Unknown)) + | Some t -> Some (T.Pointer(t))) + | Ast.DeRef -> + (match Ast0.get_type exp with + Some (T.Pointer(t)) -> Some t + | _ -> None) + | Ast.UnPlus -> Ast0.get_type exp + | Ast.UnMinus -> Ast0.get_type exp + | Ast.Tilde -> Ast0.get_type exp + | Ast.Not -> Some(bool_type)) + | Ast0.Nested(exp1,op,exp2) -> failwith "nested in type inf not possible" + | Ast0.Binary(exp1,op,exp2) -> + let ty1 = Ast0.get_type exp1 in + let ty2 = Ast0.get_type exp2 in + let same_type = function + (None,None) -> Some (int_type) - (* pad: pointer arithmetic handling as in ptr+1 *) - | (Some (T.Pointer ty1),Some ty2) when is_int_type ty2 -> - Some (T.Pointer ty1) - | (Some ty1,Some (T.Pointer ty2)) when is_int_type ty1 -> - Some (T.Pointer ty2) + (* pad: pointer arithmetic handling as in ptr+1 *) + | (Some (T.Pointer ty1),Some ty2) when is_int_type ty2 -> + Some (T.Pointer ty1) + | (Some ty1,Some (T.Pointer ty2)) when is_int_type ty1 -> + Some (T.Pointer ty2) - | (t1,t2) -> - let ty = lub_type t1 t2 in - Ast0.set_type exp1 ty; Ast0.set_type exp2 ty; ty in - (match Ast0.unwrap_mcode op with - Ast.Arith(op) -> same_type (ty1, ty2) - | Ast.Logical(op) -> - let ty = lub_type ty1 ty2 in - Ast0.set_type exp1 ty; Ast0.set_type exp2 ty; - Some(bool_type)) - | Ast0.Paren(lp,exp,rp) -> Ast0.get_type exp - | Ast0.ArrayAccess(exp1,lb,exp2,rb) -> - (match strip_cv (Ast0.get_type exp2) with - None -> Ast0.set_type exp2 (Some(int_type)) - | Some(ty) when is_int_type ty -> () - | Some ty -> err exp2 ty "bad type for an array index"); - (match strip_cv (Ast0.get_type exp1) with - None -> None - | Some (T.Array(ty)) -> Some ty - | Some (T.Pointer(ty)) -> Some ty - | Some (T.MetaType(_,_,_)) -> None - | Some x -> err exp1 x "ill-typed array reference") - (* pad: should handle structure one day and look 'field' in environment *) - | Ast0.RecordAccess(exp,pt,field) -> - (match strip_cv (Ast0.get_type exp) with - None -> None - | Some (T.StructUnionName(_,_,_)) -> None - | Some (T.TypeName(_)) -> None - | Some (T.MetaType(_,_,_)) -> None - | Some x -> err exp x "non-structure type in field ref") - | Ast0.RecordPtAccess(exp,ar,field) -> - (match strip_cv (Ast0.get_type exp) with - None -> None - | Some (T.Pointer(t)) -> - (match strip_cv (Some t) with - | Some (T.Unknown) -> None - | Some (T.MetaType(_,_,_)) -> None - | Some (T.TypeName(_)) -> None - | Some (T.StructUnionName(_,_,_)) -> None - | Some x -> - err exp (T.Pointer(t)) - "non-structure pointer type in field ref" - | _ -> failwith "not possible") - | Some (T.MetaType(_,_,_)) -> None - | Some (T.TypeName(_)) -> None - | Some x -> err exp x "non-structure pointer type in field ref") - | Ast0.Cast(lp,ty,rp,exp) -> Some(Ast0.ast0_type_to_type ty) - | Ast0.SizeOfExpr(szf,exp) -> Some(int_type) - | Ast0.SizeOfType(szf,lp,ty,rp) -> Some(int_type) - | Ast0.TypeExp(ty) -> None - | Ast0.MetaErr(name,_,_) -> None - | Ast0.MetaExpr(name,_,Some [ty],_,_) -> Some ty - | Ast0.MetaExpr(name,_,ty,_,_) -> None - | Ast0.MetaExprList(name,_,_) -> None - | Ast0.EComma(cm) -> None - | Ast0.DisjExpr(_,exp_list,_,_) -> - let types = List.map Ast0.get_type exp_list in - let combined = List.fold_left lub_type None types in - (match combined with - None -> None - | Some t -> - List.iter (function e -> Ast0.set_type e (Some t)) exp_list; - Some t) - | Ast0.NestExpr(starter,expr_dots,ender,None,multi) -> - let _ = r.VT0.combiner_rec_expression_dots expr_dots in None - | Ast0.NestExpr(starter,expr_dots,ender,Some e,multi) -> - let _ = r.VT0.combiner_rec_expression_dots expr_dots in - let _ = r.VT0.combiner_rec_expression e in None - | Ast0.Edots(_,None) | Ast0.Ecircles(_,None) | Ast0.Estars(_,None) -> - None - | Ast0.Edots(_,Some e) | Ast0.Ecircles(_,Some e) - | Ast0.Estars(_,Some e) -> - let _ = r.VT0.combiner_rec_expression e in None - | Ast0.OptExp(exp) -> Ast0.get_type exp - | Ast0.UniqueExp(exp) -> Ast0.get_type exp in - Ast0.set_type e ty; - ty in + | (t1,t2) -> + let ty = lub_type t1 t2 in + Ast0.set_type exp1 ty; Ast0.set_type exp2 ty; ty in + (match Ast0.unwrap_mcode op with + Ast.Arith(op) -> same_type (ty1, ty2) + | Ast.Logical(op) -> + let ty = lub_type ty1 ty2 in + Ast0.set_type exp1 ty; Ast0.set_type exp2 ty; + Some(bool_type)) + | Ast0.Paren(lp,exp,rp) -> Ast0.get_type exp + | Ast0.ArrayAccess(exp1,lb,exp2,rb) -> + (match strip_cv (Ast0.get_type exp2) with + None -> Ast0.set_type exp2 (Some(int_type)) + | Some(ty) when is_int_type ty -> () + | Some ty -> err exp2 ty "bad type for an array index"); + (match strip_cv (Ast0.get_type exp1) with + None -> None + | Some (T.Array(ty)) -> Some ty + | Some (T.Pointer(ty)) -> Some ty + | Some (T.MetaType(_,_,_)) -> None + | Some x -> err exp1 x "ill-typed array reference") + (* pad: should handle structure one day and look 'field' in environment *) + | Ast0.RecordAccess(exp,pt,field) -> + (match strip_cv (Ast0.get_type exp) with + None -> None + | Some (T.StructUnionName(_,_,_)) -> None + | Some (T.TypeName(_)) -> None + | Some (T.MetaType(_,_,_)) -> None + | Some x -> err exp x "non-structure type in field ref") + | Ast0.RecordPtAccess(exp,ar,field) -> + (match strip_cv (Ast0.get_type exp) with + None -> None + | Some (T.Pointer(t)) -> + (match strip_cv (Some t) with + | Some (T.Unknown) -> None + | Some (T.MetaType(_,_,_)) -> None + | Some (T.TypeName(_)) -> None + | Some (T.StructUnionName(_,_,_)) -> None + | Some x -> + err exp (T.Pointer(t)) + "non-structure pointer type in field ref" + | _ -> failwith "not possible") + | Some (T.MetaType(_,_,_)) -> None + | Some (T.TypeName(_)) -> None + | Some x -> err exp x "non-structure pointer type in field ref") + | Ast0.Cast(lp,ty,rp,exp) -> Some(Ast0.ast0_type_to_type ty) + | Ast0.SizeOfExpr(szf,exp) -> Some(int_type) + | Ast0.SizeOfType(szf,lp,ty,rp) -> Some(int_type) + | Ast0.TypeExp(ty) -> None + | Ast0.MetaErr(name,_,_) -> None + | Ast0.MetaExpr(name,_,Some [ty],_,_) -> Some ty + | Ast0.MetaExpr(name,_,ty,_,_) -> None + | Ast0.MetaExprList(name,_,_) -> None + | Ast0.EComma(cm) -> None + | Ast0.DisjExpr(_,exp_list,_,_) -> + let types = List.map Ast0.get_type exp_list in + let combined = List.fold_left lub_type None types in + (match combined with + None -> None + | Some t -> + List.iter (function e -> Ast0.set_type e (Some t)) exp_list; + Some t) + | Ast0.NestExpr(starter,expr_dots,ender,None,multi) -> + let _ = r.VT0.combiner_rec_expression_dots expr_dots in None + | Ast0.NestExpr(starter,expr_dots,ender,Some e,multi) -> + let _ = r.VT0.combiner_rec_expression_dots expr_dots in + let _ = r.VT0.combiner_rec_expression e in None + | Ast0.Edots(_,None) | Ast0.Ecircles(_,None) | Ast0.Estars(_,None) -> + None + | Ast0.Edots(_,Some e) | Ast0.Ecircles(_,Some e) + | Ast0.Estars(_,Some e) -> + let _ = r.VT0.combiner_rec_expression e in None + | Ast0.OptExp(exp) -> Ast0.get_type exp + | Ast0.UniqueExp(exp) -> Ast0.get_type exp in + Ast0.set_type e ty; + ty in let rec strip id = match Ast0.unwrap id with - Ast0.Id(name) -> Id(Ast0.unwrap_mcode name) + Ast0.Id(name) -> Id(Ast0.unwrap_mcode name) | Ast0.MetaId(name,_,_) -> Meta(Ast0.unwrap_mcode name) | Ast0.MetaFunc(name,_,_) -> Meta(Ast0.unwrap_mcode name) | Ast0.MetaLocalFunc(name,_,_) -> Meta(Ast0.unwrap_mcode name) - | Ast0.OptIdent(id) -> strip id - | Ast0.UniqueIdent(id) -> strip id in + | Ast0.OptIdent(id) -> strip id + | Ast0.UniqueIdent(id) -> strip id in let process_whencode notfn allfn exp = function Ast0.WhenNot(x) -> let _ = notfn x in () diff --git a/parsing_cocci/type_infer.mli b/parsing_cocci/type_infer.mli index 796c6c7..70d2f8a 100644 --- a/parsing_cocci/type_infer.mli +++ b/parsing_cocci/type_infer.mli @@ -1 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val type_infer : Ast0_cocci.rule -> unit diff --git a/parsing_cocci/unify_ast.ml b/parsing_cocci/unify_ast.ml index f5631a8..59a14fa 100644 --- a/parsing_cocci/unify_ast.ml +++ b/parsing_cocci/unify_ast.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* --------------------------------------------------------------------- *) diff --git a/parsing_cocci/unify_ast.mli b/parsing_cocci/unify_ast.mli index 95a7d6f..e15f799 100644 --- a/parsing_cocci/unify_ast.mli +++ b/parsing_cocci/unify_ast.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + type res = NO | MAYBE val unify_statement_dots : diff --git a/parsing_cocci/unitary_ast0.ml b/parsing_cocci/unitary_ast0.ml index 965d25c..77d3bc4 100644 --- a/parsing_cocci/unitary_ast0.ml +++ b/parsing_cocci/unitary_ast0.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* find unitary metavariables *) @@ -41,7 +41,7 @@ let minus_checker name = let id = Ast0.unwrap_mcode name in [id] (* take only what is in the plus code *) let plus_checker (nm,_,_,mc,_,_) = - match mc with Ast0.PLUS -> [nm] | _ -> [] + match mc with Ast0.PLUS _ -> [nm] | _ -> [] let get_free checker t = let bind x y = x @ y in diff --git a/parsing_cocci/unitary_ast0.mli b/parsing_cocci/unitary_ast0.mli index 8aa5873..1ad6368 100644 --- a/parsing_cocci/unitary_ast0.mli +++ b/parsing_cocci/unitary_ast0.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + (* 'iso is the return type of parse_iso, which currently is (Ast_cocci.metavar list * Ast0_cocci.anything list list) list *) diff --git a/parsing_cocci/unparse_ast0.ml b/parsing_cocci/unparse_ast0.ml index 187dc31..42e4acd 100644 --- a/parsing_cocci/unparse_ast0.ml +++ b/parsing_cocci/unparse_ast0.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Format @@ -79,7 +79,7 @@ let mcodekind brackets fn x info mc = (function x -> print_string lb; fn x; print_string rb) x plus_streams - | Ast0.PLUS -> print_int (info.Ast0.pos_info.Ast0.column); fn x + | Ast0.PLUS _ -> print_int (info.Ast0.pos_info.Ast0.column); fn x | Ast0.MIXED(plus_streams) -> let (lb,rb) = if !quiet diff --git a/parsing_cocci/unparse_ast0.mli b/parsing_cocci/unparse_ast0.mli index 6f66fc0..b0adbb4 100644 --- a/parsing_cocci/unparse_ast0.mli +++ b/parsing_cocci/unparse_ast0.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val expression_dots : Ast0_cocci.expression Ast0_cocci.dots -> unit val parameter_list : Ast0_cocci.parameterTypeDef Ast0_cocci.dots -> unit val statement_dots : Ast0_cocci.statement Ast0_cocci.dots -> unit diff --git a/parsing_cocci/visitor_ast.ml b/parsing_cocci/visitor_ast.ml index 18b3e27..d8be92b 100644 --- a/parsing_cocci/visitor_ast.ml +++ b/parsing_cocci/visitor_ast.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module Ast0 = Ast0_cocci @@ -115,13 +115,13 @@ let combiner bind option_default and ident i = let k i = match Ast.unwrap i with - Ast.Id(name) -> string_mcode name - | Ast.MetaId(name,_,_,_) -> meta_mcode name - | Ast.MetaFunc(name,_,_,_) -> meta_mcode name - | Ast.MetaLocalFunc(name,_,_,_) -> meta_mcode name - | Ast.OptIdent(id) -> ident id - | Ast.UniqueIdent(id) -> ident id in - identfn all_functions k i + Ast.Id(name) -> string_mcode name + | Ast.MetaId(name,_,_,_) -> meta_mcode name + | Ast.MetaFunc(name,_,_,_) -> meta_mcode name + | Ast.MetaLocalFunc(name,_,_,_) -> meta_mcode name + | Ast.OptIdent(id) -> ident id + | Ast.UniqueIdent(id) -> ident id in + identfn all_functions k i and expression e = let k e = diff --git a/parsing_cocci/visitor_ast.mli b/parsing_cocci/visitor_ast.mli index 9e2060c..9a4f89b 100644 --- a/parsing_cocci/visitor_ast.mli +++ b/parsing_cocci/visitor_ast.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + type 'a combiner = {combiner_ident : Ast_cocci.ident -> 'a; combiner_expression : Ast_cocci.expression -> 'a; diff --git a/parsing_cocci/visitor_ast0.ml b/parsing_cocci/visitor_ast0.ml index 985b6ff..37aac22 100644 --- a/parsing_cocci/visitor_ast0.ml +++ b/parsing_cocci/visitor_ast0.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) (* --------------------------------------------------------------------- *) diff --git a/parsing_cocci/visitor_ast0.mli b/parsing_cocci/visitor_ast0.mli index 14b8212..9ec67ce 100644 --- a/parsing_cocci/visitor_ast0.mli +++ b/parsing_cocci/visitor_ast0.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + val combiner_functions : 'a Visitor_ast0_types.combiner_functions val combiner : ('a -> 'a -> 'a) -> diff --git a/parsing_cocci/visitor_ast0_types.ml b/parsing_cocci/visitor_ast0_types.ml index 0e703d1..21a12c1 100644 --- a/parsing_cocci/visitor_ast0_types.ml +++ b/parsing_cocci/visitor_ast0_types.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) module Ast0 = Ast0_cocci diff --git a/popl/Makefile b/popl/Makefile new file mode 100644 index 0000000..326f20b --- /dev/null +++ b/popl/Makefile @@ -0,0 +1,104 @@ +# Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +# This file is part of Coccinelle. +# +# Coccinelle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, according to version 2 of the License. +# +# Coccinelle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Coccinelle. If not, see . +# +# The authors reserve the right to distribute this or future versions of +# Coccinelle under other licenses. + + +#note: if you add a file (a .mli or .ml), dont forget to do a make depend + +-include ../Makefile.config + +TARGET = popl + +SRC = ast_popl.ml asttopopl.ml insert_quantifiers.ml insert_befaft.ml \ +pretty_print_popl.ml popltoctl.ml popl.ml flag_popl.ml + +SYSLIBS=str.cma unix.cma +LIBS=../commons/commons.cma ../globals/globals.cma + +INCLUDE_PATH = -I ../commons -I ../globals \ + -I ../ctl -I ../parsing_c -I ../parsing_cocci -I ../engine + +#The Caml compilers. +#for warning: -w A +#for profiling: -p -inline 0 with OCAMLOPT +CAMLC =ocamlc$(OPTBIN) -dtypes -g +CAMLOPT=ocamlopt$(OPTBIN) $(OPTFLAGS) +CAMLLEX = ocamllex$(OPTBIN) +CAMLYACC= ocamlyacc +CAMLDEP = ocamldep$(OPTBIN) +CAMLMKTOP=ocamlmktop -g -custom + + + +LIB=$(TARGET).cma +OPTLIB=$(LIB:.cma=.cmxa) + +OBJS = $(SRC:.ml=.cmo) +OPTOBJS = $(SRC:.ml=.cmx) + +all: $(LIB) +all.opt: $(OPTLIB) + +$(TARGET).top: $(LIB) + $(CAMLMKTOP) -o $(TARGET).top $(SYSLIBS) $(LIBS) $(OBJS) + +$(LIB): $(OBJS) + $(CAMLC) -a -o $(LIB) $(OBJS) + +clean:: + rm -f $(LIB) $(TARGET).top + + +$(OPTLIB): $(OPTOBJS) + $(CAMLOPT) -a -o $(OPTLIB) $(OPTOBJS) + +# clean rule for LIB.opt +clean:: + rm -f $(OPTLIB) $(LIB:.cma=.a) + + +.SUFFIXES: +.SUFFIXES: .ml .mli .cmo .cmi .cmx + +.ml.cmo: + $(CAMLC) $(INCLUDE_PATH) -c $< + +.mli.cmi: + $(CAMLC) $(INCLUDE_PATH) -c $< + +.ml.cmx: + $(CAMLOPT) $(INCLUDE_PATH) -c $< + + + + +# clean rule for others files +clean:: + rm -f *.cm[iox] *.o *.annot + rm -f *~ .*~ #*# + +depend: + $(CAMLDEP) $(INCLUDE_PATH) *.mli *.ml > .depend + +distclean:: + rm -f .depend + +.depend: + $(CAMLDEP) $(INCLUDE_PATH) *.mli *.ml > .depend + +-include .depend diff --git a/popl/ast_popl.ml b/popl/ast_popl.ml new file mode 100644 index 0000000..7b128ab --- /dev/null +++ b/popl/ast_popl.ml @@ -0,0 +1,38 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +type sequence = + Seq of element * sequence + | Empty + | SExists of Ast_cocci.meta_name * sequence + +and element = + Term of Ast_cocci.rule_elem + | Or of sequence * sequence + | DInfo of dots * element list (* before *) * element list (* after *) + | EExists of Ast_cocci.meta_name * element + +and dots = + Dots + | Nest of sequence + | When of dots * sequence + | DExists of Ast_cocci.meta_name * dots diff --git a/popl/asttopopl.ml b/popl/asttopopl.ml new file mode 100644 index 0000000..21d5b92 --- /dev/null +++ b/popl/asttopopl.ml @@ -0,0 +1,74 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +module Ast = Ast_cocci +module Past = Ast_popl + +(* --------------------------------------------------------------------- *) + +let rec stm s = + match Ast.unwrap s with + Ast.Atomic(ast) -> + (match Ast.unwrap ast with + Ast.ExprStatement(_,_) -> Past.Term ast + | Ast.Exp(_) -> Past.Term ast + | Ast.Decl(_,_,_) -> Past.Term ast + | _ -> failwith "complex statements not supported") + | Ast.Disj(stm1::stm2::stmts) -> + List.fold_left + (function prev -> + function cur -> + Past.Or(Past.Seq(prev,Past.Empty),stm_list cur)) + (Past.Or(stm_list stm1,stm_list stm2)) stmts + | Ast.Dots(dots,whencodes,_,_) -> + (match whencodes with + [Ast.WhenNot(a)] -> Past.DInfo(Past.When(Past.Dots,stm_list a),[],[]) + | _ -> failwith "only one when != supported") + | Ast.Nest(stmt_dots,whencodes,false,_,_) -> + let nest = Past.Nest(stm_list stmt_dots) in + (match whencodes with + [Ast.WhenNot(a)] -> Past.DInfo(Past.When(nest,stm_list a),[],[]) + | _ -> failwith "only when != supported") + | Ast.While(header,body,(_,_,_,aft)) | Ast.For(header,body,(_,_,_,aft)) -> + (* only allowed if only the header is significant *) + (match (Ast.unwrap body,aft) with + (Ast.Atomic(re),Ast.CONTEXT(_,Ast.NOTHING)) -> + (match Ast.unwrap re with + Ast.MetaStmt(_,Type_cocci.Unitary,_,false) -> Past.Term header + | _ -> failwith "unsupported statement1") + | _ -> failwith "unsupported statement2") + | _ -> + Pretty_print_cocci.statement "" s; + failwith "unsupported statement3" + +and stm_list s = + match Ast.unwrap s with + Ast.DOTS(d) -> + List.fold_right + (function cur -> function rest -> Past.Seq(stm cur, rest)) + d Past.Empty + | _ -> failwith "only DOTS handled" + +let top s = + match Ast.unwrap s with + Ast.CODE(stmt_dots) -> stm_list stmt_dots + | _ -> failwith "only CODE handled" diff --git a/popl/asttopopl.mli b/popl/asttopopl.mli new file mode 100644 index 0000000..d4d049f --- /dev/null +++ b/popl/asttopopl.mli @@ -0,0 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +val top : Ast_cocci.top_level -> Ast_popl.sequence diff --git a/popl/insert_befaft.ml b/popl/insert_befaft.ml new file mode 100644 index 0000000..32207d7 --- /dev/null +++ b/popl/insert_befaft.ml @@ -0,0 +1,113 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +module Past = Ast_popl + +(* --------------------------------------------------------------------- *) + +let rec get_before a = function + Past.Seq(elem,seq) -> + let (elem,ea) = get_before_element a elem in + let (seq,sla) = get_before ea seq in + (Past.Seq(elem,seq),sla) + | Past.Empty -> (Past.Empty,a) + | Past.SExists(var,seq) -> failwith "not possible" + +and get_before_element a = function + Past.Term(term) as s -> (s,[s]) + | Past.Or(seq1,seq2) -> + let (seq1,seq1a) = get_before a seq1 in + let (seq2,seq2a) = get_before a seq2 in + (Past.Or(seq1,seq2),Common.union_set seq1a seq2a) + | Past.DInfo(dots,_,seq_aft) -> + let dots = get_before_dots a dots in + (Past.DInfo(dots,a,seq_aft),a) + | Past.EExists(var,seq) -> failwith "not possible" + +and get_before_dots a = function + Past.Dots -> Past.Dots + | Past.Nest(seq) -> + let (seq,_) = get_before a seq in + Past.Nest(seq) + | Past.When(dots,seq) -> + let dots = get_before_dots a dots in + let (seq,_) = get_before [] seq in + Past.When(dots,seq) + | Past.DExists(var,dots) -> failwith "not possible" + +(* --------------------------------------------------------------------- *) + +let rec get_after a = function + Past.Seq(elem,seq) -> + let (seq,sla) = get_after a seq in + let (elem,ea) = get_after_element sla elem in + (Past.Seq(elem,seq),ea) + | Past.Empty -> (Past.Empty,a) + | Past.SExists(var,seq) -> failwith "not possible" + +and get_after_element a = function + Past.Term(term) as s -> (s,[s]) + | Past.Or(seq1,seq2) -> + let (seq1,seq1a) = get_after a seq1 in + let (seq2,seq2a) = get_after a seq2 in + (Past.Or(seq1,seq2),Common.union_set seq1a seq2a) + | Past.DInfo(dots,seq_bef,_) -> + let dots = get_after_dots a dots in + (Past.DInfo(dots,seq_bef,a),a) + | Past.EExists(var,seq) -> failwith "not possible" + +and get_after_dots a = function + Past.Dots -> Past.Dots + | Past.Nest(seq) -> + let (seq,_) = get_after (Common.union_set (get_first [] seq) a) seq in + Past.Nest(seq) + | Past.When(dots,seq) -> + let dots = get_after_dots a dots in + let (seq,_) = get_after [] seq in + Past.When(dots,seq) + | Past.DExists(var,dots) -> failwith "not possible" + +(* --------------------------------------------------------------------- *) +(* like get_after, but just returns the a component; doesn't modify the term *) + +and get_first a = function + Past.Seq(elem,seq) -> + let sla = get_first a seq in + let ea = get_first_element sla elem in + ea + | Past.Empty -> a + | Past.SExists(var,seq) -> failwith "not possible" + +and get_first_element a = function + Past.Term(term) as s -> [s] + | Past.Or(seq1,seq2) -> + Common.union_set (get_first a seq1) (get_first a seq2) + | Past.DInfo(dots,_,_) -> a + | Past.EExists(var,seq) -> failwith "not possible" + +(* --------------------------------------------------------------------- *) +(* Entry point *) + +let insert_befaft sl = + let (sl,_) = get_before [] sl in + let (sl,_) = get_after [] sl in + sl diff --git a/popl/insert_befaft.mli b/popl/insert_befaft.mli new file mode 100644 index 0000000..30c4fab --- /dev/null +++ b/popl/insert_befaft.mli @@ -0,0 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +val insert_befaft : Ast_popl.sequence -> Ast_popl.sequence diff --git a/popl/insert_quantifiers.ml b/popl/insert_quantifiers.ml new file mode 100644 index 0000000..daf21ea --- /dev/null +++ b/popl/insert_quantifiers.ml @@ -0,0 +1,95 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +module Ast = Ast_cocci +module Past = Ast_popl + +(* --------------------------------------------------------------------- *) + +let rec fvs_sequence = function + Past.Seq(elem,seq) -> + Common.union_set (fvs_element elem) (fvs_sequence seq) + | Past.Empty -> [] + | Past.SExists(var,seq) -> failwith "not possible" + +and fvs_element = function + Past.Term(term) -> Ast.get_fvs term + | Past.Or(seq1,seq2) -> + Common.union_set (fvs_sequence seq1) (fvs_sequence seq2) + | Past.DInfo(dots,seq_bef,seq_aft) -> + List.fold_left + (function prev -> + function cur -> + Common.union_set (fvs_element cur) prev) + (fvs_dots dots) seq_bef + | Past.EExists(var,seq) -> failwith "not possible" + +and fvs_dots = function + Past.Dots -> [] + | Past.Nest(seq) -> fvs_sequence seq + | Past.When(dots,seq) -> Common.union_set (fvs_dots dots) (fvs_sequence seq) + | Past.DExists(var,dots) -> failwith "not possible" + +(* --------------------------------------------------------------------- *) + +let rec quant_sequence bound = function + Past.Seq(elem,seq) -> + let fe = fvs_element elem in + let fs = fvs_sequence seq in + let inter = Common.inter_set fe fs in + let free = Common.minus_set inter bound in + let new_bound = free @ bound in + List.fold_right (function cur -> function rest -> Past.SExists(cur,rest)) + free (Past.Seq(quant_element new_bound elem, + quant_sequence new_bound seq)) + | Past.Empty -> Past.Empty + | Past.SExists(var,seq) -> failwith "not possible" + +and quant_element bound = function + Past.Term(term) as x -> + let free = Common.minus_set (fvs_element x) bound in + List.fold_right (function cur -> function rest -> Past.EExists(cur,rest)) + free x + | Past.Or(seq1,seq2) -> + Past.Or(quant_sequence bound seq1,quant_sequence bound seq2) + | Past.DInfo(dots,seq_bef,seq_aft) -> + Past.DInfo(quant_dots bound dots,seq_bef, + List.map (quant_element bound) seq_aft) + | Past.EExists(var,seq) -> failwith "not possible" + +and quant_dots bound = function + Past.Dots -> Past.Dots + | Past.Nest(seq) -> Past.Nest(quant_sequence bound seq) + | Past.When(dots,seq) -> + let fd = fvs_dots dots in + let fs = fvs_sequence seq in + let inter = Common.inter_set fd fs in + let free = Common.minus_set inter bound in + let new_bound = free @ bound in + List.fold_right (function cur -> function rest -> Past.DExists(cur,rest)) + free (Past.When(quant_dots new_bound dots, + quant_sequence new_bound seq)) + | Past.DExists(var,dots) -> failwith "not possible" + +(* --------------------------------------------------------------------- *) + +let insert_quantifiers x = quant_sequence [] x diff --git a/popl/insert_quantifiers.mli b/popl/insert_quantifiers.mli new file mode 100644 index 0000000..f0d7622 --- /dev/null +++ b/popl/insert_quantifiers.mli @@ -0,0 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +val insert_quantifiers : Ast_popl.sequence -> Ast_popl.sequence diff --git a/popl/popl.ml b/popl/popl.ml new file mode 100644 index 0000000..2a82247 --- /dev/null +++ b/popl/popl.ml @@ -0,0 +1,39 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +type cocci_predicate = Lib_engine.predicate * Ast_cocci.meta_name Ast_ctl.modif +type formula = + (cocci_predicate,Ast_cocci.meta_name, Wrapper_ctl.info) Ast_ctl.generic_ctl + +let poplz (name,_,ast) = + match ast with + [ast] -> + let ast = Asttopopl.top ast in + let ba = Insert_befaft.insert_befaft ast in + let qt = Insert_quantifiers.insert_quantifiers ba in + [Popltoctl.toctl qt] + | _ -> failwith "only one rule allowed" + +let popl r = + match r with + Ast_cocci.CocciRule (a,b,c) -> poplz (a,b,c) + | _ -> [] diff --git a/popl/popl.mli b/popl/popl.mli new file mode 100644 index 0000000..8b813c2 --- /dev/null +++ b/popl/popl.mli @@ -0,0 +1,27 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +type cocci_predicate = Lib_engine.predicate * Ast_cocci.meta_name Ast_ctl.modif +type formula = + (cocci_predicate,Ast_cocci.meta_name, Wrapper_ctl.info) Ast_ctl.generic_ctl + +val popl : Ast_cocci.rule -> formula list diff --git a/popl/popltoctl.ml b/popl/popltoctl.ml new file mode 100644 index 0000000..7941d06 --- /dev/null +++ b/popl/popltoctl.ml @@ -0,0 +1,202 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +module Past = Ast_popl +module Ast = Ast_cocci +module V = Visitor_ast +module CTL = Ast_ctl + +(* --------------------------------------------------------------------- *) +(* result type *) + +type cocci_predicate = Lib_engine.predicate * Ast.meta_name Ast_ctl.modif +type formula = + (cocci_predicate,Ast_cocci.meta_name, Wrapper_ctl.info) Ast_ctl.generic_ctl + +(* --------------------------------------------------------------------- *) + +let contains_modif = + let bind x y = x or y in + let option_default = false in + let mcode r (_,_,kind,_) = + match kind with + Ast.MINUS(_,_) -> true + | Ast.PLUS -> failwith "not possible" + | Ast.CONTEXT(_,info) -> not (info = Ast.NOTHING) in + let do_nothing r k e = k e in + let rule_elem r k re = + let res = k re in + match Ast.unwrap re with + Ast.FunHeader(bef,_,fninfo,name,lp,params,rp) -> + bind (mcode r ((),(),bef,Ast.NoMetaPos)) res + | Ast.Decl(bef,_,decl) -> bind (mcode r ((),(),bef,Ast.NoMetaPos)) res + | _ -> res in + let recursor = + V.combiner bind option_default + mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode + mcode + do_nothing do_nothing do_nothing do_nothing + do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing + do_nothing rule_elem do_nothing do_nothing do_nothing do_nothing in + recursor.V.combiner_rule_elem + +let ctl_exists v x keep_wit = CTL.Exists(v,x,keep_wit) + +let predmaker guard term = + let pos = ("","_p") in + ctl_exists true pos + (if guard && contains_modif term + then + let v = ("","_v") in + ctl_exists true v + (CTL.Pred (Lib_engine.Match(term),CTL.Modif v)) + else CTL.Pred (Lib_engine.Match(term),CTL.Control)) + +(* --------------------------------------------------------------------- *) + +let is_true = function CTL.True -> true | _ -> false + +let is_false = function CTL.False -> true | _ -> false + +let ctl_true = CTL.True + +let ctl_false = CTL.False + +let ctl_and x y = + if is_true x then y + else if is_true y then x else CTL.And(CTL.STRICT,x,y) + +let ctl_or x y = + if is_false x then y + else if is_false y then x else CTL.Or(x,y) + +let ctl_seqor x y = CTL.SeqOr(x,y) + +let ctl_not x = CTL.Not(x) + +let ctl_ax x = + if is_true x then CTL.True + else CTL.AX(CTL.FORWARD,CTL.STRICT,x) + +let after = CTL.Pred(Lib_engine.After, CTL.Control) +let exit = CTL.Pred(Lib_engine.Exit, CTL.Control) +let truepred = CTL.Pred(Lib_engine.TrueBranch, CTL.Control) +let retpred = CTL.Pred(Lib_engine.Return, CTL.Control) + +let string2var x = ("",x) + +let labelctr = ref 0 +let get_label_ctr _ = + let cur = !labelctr in + labelctr := cur + 1; + string2var (Printf.sprintf "l%d" cur) + +let ctl_au x seq_after y = + let lv = get_label_ctr() in + let labelpred = CTL.Pred(Lib_engine.Label lv,CTL.Control) in + let preflabelpred = CTL.Pred(Lib_engine.PrefixLabel lv,CTL.Control) in + let matchgoto = CTL.Pred(Lib_engine.Goto,CTL.Control) in + let matchbreak = + predmaker false + (Ast.make_term + (Ast.Break(Ast.make_mcode "break",Ast.make_mcode ";"))) in + let matchcontinue = + predmaker false + (Ast.make_term + (Ast.Continue(Ast.make_mcode "continue",Ast.make_mcode ";"))) in + let stop_early = + ctl_or after + (ctl_and (ctl_and truepred labelpred) + (CTL.AU + (CTL.FORWARD,CTL.STRICT,preflabelpred, + ctl_and preflabelpred + (ctl_or retpred + (ctl_and (ctl_or (ctl_or matchgoto matchbreak) matchcontinue) + (CTL.AG + (CTL.FORWARD,CTL.STRICT, + ctl_not seq_after))))))) in + CTL.AU(CTL.FORWARD,CTL.STRICT,x,ctl_or y stop_early) + +let ctl_uncheck x = CTL.Uncheck(x) + +(* --------------------------------------------------------------------- *) + +let rec ctl_seq keep_wit a = function + Past.Seq(elem,seq) -> + ctl_element keep_wit (ctl_seq keep_wit a seq) elem + | Past.Empty -> a + | Past.SExists(var,seq) -> ctl_exists keep_wit var (ctl_seq keep_wit a seq) + +and ctl_element keep_wit a = function + Past.Term(term) -> ctl_and (predmaker keep_wit term) (ctl_ax a) + | Past.Or(seq1,seq2) -> + ctl_seqor (ctl_seq keep_wit a seq1) (ctl_seq keep_wit a seq2) + | Past.DInfo(dots,seq_bef,seq_aft) -> + let shortest l = + List.fold_left ctl_or ctl_false + (List.map (ctl_element false ctl_true) l) in + let s = shortest (Common.union_set seq_bef seq_aft) in + ctl_au (ctl_and (guard_ctl_dots keep_wit dots) (ctl_not s)) + (shortest seq_aft) a + | Past.EExists(var,elem) -> + ctl_exists keep_wit var (ctl_element keep_wit a elem) + +(* --------------------------------------------------------------------- *) + +and guard_ctl_seq keep_wit = function + Past.Seq(elem,Past.Empty) -> guard_ctl_element keep_wit elem + | Past.Seq(elem,seq) -> + ctl_element keep_wit (guard_ctl_seq keep_wit seq) elem + | Past.Empty -> ctl_true + | Past.SExists(var,seq) -> + ctl_exists keep_wit var (guard_ctl_seq keep_wit seq) + +and guard_ctl_element keep_wit = function + Past.Term(term) -> predmaker keep_wit term + | Past.Or(seq1,seq2) -> + ctl_seqor (guard_ctl_seq keep_wit seq1) (guard_ctl_seq keep_wit seq2) + | Past.DInfo(dots,seq_bef,seq_aft) -> + let shortest l = + List.fold_left ctl_or ctl_false + (List.map (ctl_element false ctl_true) l) in + let s = shortest (Common.union_set seq_bef seq_aft) in + let aft = ctl_or s exit in + ctl_au (ctl_and (guard_ctl_dots keep_wit dots) (ctl_not s)) + (shortest seq_aft) aft + | Past.EExists(var,elem) -> + ctl_exists keep_wit var (guard_ctl_element keep_wit elem) + +and guard_ctl_dots keep_wit = function + Past.Dots -> ctl_true + | Past.Nest(_) when not keep_wit -> ctl_true + | Past.Nest(seq) -> + ctl_or (guard_ctl_seq true seq) (ctl_not (guard_ctl_seq false seq)) + | Past.When(dots,seq) -> + ctl_and + (guard_ctl_dots keep_wit dots) + (ctl_not (ctl_seq false ctl_true seq)) + | Past.DExists(var,dots) -> + ctl_exists keep_wit var (guard_ctl_dots keep_wit dots) + +(* --------------------------------------------------------------------- *) + +let toctl sl = ctl_seq true ctl_true sl diff --git a/popl/popltoctl.mli b/popl/popltoctl.mli new file mode 100644 index 0000000..0ddbb6d --- /dev/null +++ b/popl/popltoctl.mli @@ -0,0 +1,27 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +type cocci_predicate = Lib_engine.predicate * Ast_cocci.meta_name Ast_ctl.modif +type formula = + (cocci_predicate,Ast_cocci.meta_name, Wrapper_ctl.info) Ast_ctl.generic_ctl + +val toctl : Ast_popl.sequence -> formula diff --git a/popl/pretty_print_popl.ml b/popl/pretty_print_popl.ml new file mode 100644 index 0000000..3c58341 --- /dev/null +++ b/popl/pretty_print_popl.ml @@ -0,0 +1,76 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +open Format +module Past = Ast_popl + +let start_block str = + force_newline(); print_string " "; open_box 0 + +let end_block str = + close_box(); force_newline () + +(* --------------------------------------------------------------------- *) + +let rec print_sequence = function + Past.Seq(e,seq) -> print_element e; force_newline(); print_sequence seq + | Past.Empty -> () + | Past.SExists((_,v),seq) -> print_string "exists "; print_string v; + print_string " ."; force_newline(); print_sequence seq + +and print_element = function + Past.Term(term) -> Pretty_print_cocci.rule_elem "" term + | Past.Or(seq1,seq2) -> + force_newline(); print_string "("; force_newline(); print_sequence seq1; + print_string "|"; force_newline(); print_sequence seq2; print_string ")" + | Past.DInfo(dots,bef,aft) -> + start_block(); + List.iter + (function b -> print_string ">>>"; print_element b; force_newline()) + bef; + print_dots dots; + List.iter + (function b -> force_newline(); print_string "<<<"; print_element b) + aft; + end_block() + | Past.EExists((_,v),elem) -> print_string "exists "; print_string v; + print_string " ."; force_newline(); print_element elem + +and print_dots = function + Past.Dots -> print_string "..." + | Past.Nest(seq)-> print_string "<..."; start_block(); print_sequence seq; + end_block(); print_string "...>" + | Past.When(dots,seq) -> print_dots dots; print_string " when != "; + open_box 0; print_sequence seq; close_box() + | Past.DExists((_,v),dots) -> print_string "exists "; print_string v; + print_string " ."; force_newline(); print_dots dots + +(* --------------------------------------------------------------------- *) + +let pretty_print_e e = + print_element e; + print_newline() + +let pretty_print sl = + print_sequence sl; + print_newline() + diff --git a/popl/pretty_print_popl.mli b/popl/pretty_print_popl.mli new file mode 100644 index 0000000..5193f26 --- /dev/null +++ b/popl/pretty_print_popl.mli @@ -0,0 +1,24 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +val pretty_print : Ast_popl.sequence -> unit +val pretty_print_e : Ast_popl.element -> unit diff --git a/popl09/.depend b/popl09/.depend new file mode 100644 index 0000000..687e676 --- /dev/null +++ b/popl09/.depend @@ -0,0 +1,33 @@ +asttopopl.cmi: ast_popl.cmo ../parsing_cocci/ast_cocci.cmi +insert_quantifiers.cmi: ast_popl.cmo +popl.cmi: ../ctl/wrapper_ctl.cmi ../engine/lib_engine.cmo ../ctl/ast_ctl.cmo \ + ../parsing_cocci/ast_cocci.cmi +popltoctl.cmi: ../ctl/wrapper_ctl.cmi ../engine/lib_engine.cmo ast_popl.cmo \ + ../ctl/ast_ctl.cmo ../parsing_cocci/ast_cocci.cmi +pretty_print_popl.cmi: ast_popl.cmo +ast_popl.cmo: ../parsing_cocci/ast_cocci.cmi +ast_popl.cmx: ../parsing_cocci/ast_cocci.cmx +asttopopl.cmo: ../parsing_cocci/pretty_print_cocci.cmi ast_popl.cmo \ + ../parsing_cocci/ast_cocci.cmi asttopopl.cmi +asttopopl.cmx: ../parsing_cocci/pretty_print_cocci.cmx ast_popl.cmx \ + ../parsing_cocci/ast_cocci.cmx asttopopl.cmi +insert_quantifiers.cmo: ../commons/common.cmi ast_popl.cmo \ + ../parsing_cocci/ast_cocci.cmi insert_quantifiers.cmi +insert_quantifiers.cmx: ../commons/common.cmx ast_popl.cmx \ + ../parsing_cocci/ast_cocci.cmx insert_quantifiers.cmi +popl.cmo: ../ctl/wrapper_ctl.cmi popltoctl.cmi ../engine/lib_engine.cmo \ + insert_quantifiers.cmi asttopopl.cmi ../ctl/ast_ctl.cmo \ + ../parsing_cocci/ast_cocci.cmi popl.cmi +popl.cmx: ../ctl/wrapper_ctl.cmx popltoctl.cmx ../engine/lib_engine.cmx \ + insert_quantifiers.cmx asttopopl.cmx ../ctl/ast_ctl.cmx \ + ../parsing_cocci/ast_cocci.cmx popl.cmi +popltoctl.cmo: ../ctl/wrapper_ctl.cmi ../parsing_cocci/visitor_ast.cmi \ + ../engine/lib_engine.cmo flag_popl.cmo ast_popl.cmo ../ctl/ast_ctl.cmo \ + ../parsing_cocci/ast_cocci.cmi popltoctl.cmi +popltoctl.cmx: ../ctl/wrapper_ctl.cmx ../parsing_cocci/visitor_ast.cmx \ + ../engine/lib_engine.cmx flag_popl.cmx ast_popl.cmx ../ctl/ast_ctl.cmx \ + ../parsing_cocci/ast_cocci.cmx popltoctl.cmi +pretty_print_popl.cmo: ../parsing_cocci/pretty_print_cocci.cmi ast_popl.cmo \ + ../parsing_cocci/ast_cocci.cmi pretty_print_popl.cmi +pretty_print_popl.cmx: ../parsing_cocci/pretty_print_cocci.cmx ast_popl.cmx \ + ../parsing_cocci/ast_cocci.cmx pretty_print_popl.cmi diff --git a/popl09/Makefile b/popl09/Makefile new file mode 100644 index 0000000..8e7ba83 --- /dev/null +++ b/popl09/Makefile @@ -0,0 +1,102 @@ +# Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +# This file is part of Coccinelle. +# +# Coccinelle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, according to version 2 of the License. +# +# Coccinelle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Coccinelle. If not, see . +# +# The authors reserve the right to distribute this or future versions of +# Coccinelle under other licenses. + + +#note: if you add a file (a .mli or .ml), dont forget to do a make depend + +-include ../Makefile.config +TARGET = popl + +SRC = ast_popl.ml asttopopl.ml insert_quantifiers.ml \ +pretty_print_popl.ml flag_popl.ml popltoctl.ml popl.ml + +SYSLIBS=str.cma unix.cma +LIBS=../commons/commons.cma ../globals/globals.cma + +INCLUDES = -I ../commons -I ../globals \ + -I ../ctl -I ../parsing_cocci -I ../parsing_c -I ../engine + +#The Caml compilers. +#for warning: -w A +#for profiling: -p -inline 0 with OCAMLOPT +OCAMLCFLAGS ?= -g -dtypes +OCAMLC =ocamlc$(OPTBIN) $(OCAMLCFLAGS) $(INCLUDES) +OCAMLOPT = ocamlopt$(OPTBIN) $(OPTFLAGS) $(INCLUDES) +OCAMLDEP = ocamldep$(OPTBIN) $(INCLUDES) +OCAMLMKTOP=ocamlmktop -g -custom + + + +LIB=$(TARGET).cma +OPTLIB=$(LIB:.cma=.cmxa) + +OBJS = $(SRC:.ml=.cmo) +OPTOBJS = $(SRC:.ml=.cmx) + +all: $(LIB) +all.opt: $(OPTLIB) + +$(TARGET).top: $(LIB) + $(OCAMLMKTOP) -o $(TARGET).top $(SYSLIBS) $(LIBS) $(OBJS) + +$(LIB): $(OBJS) + $(OCAMLC) -a -o $(LIB) $(OBJS) + +clean:: + rm -f $(LIB) $(TARGET).top + + +$(OPTLIB): $(OPTOBJS) + $(OCAMLOPT) -a -o $(OPTLIB) $(OPTOBJS) + +# clean rule for LIB.opt +clean:: + rm -f $(OPTLIB) $(LIB:.cma=.a) + + +.SUFFIXES: +.SUFFIXES: .ml .mli .cmo .cmi .cmx + +.ml.cmo: + $(OCAMLC) -c $< + +.mli.cmi: + $(OCAMLC) -c $< + +.ml.cmx: + $(OCAMLOPT) -c $< + + + + +# clean rule for others files +clean:: + rm -f *.cm[iox] *.o *.annot + rm -f *~ .*~ #*# + +depend: + $(OCAMLDEP) *.mli *.ml > .depend + +distclean:: + rm -f .depend + +.depend: + $(OCAMLDEP) $(INCLUDE_PATH) *.mli *.ml > .depend + +-include .depend diff --git a/popl09/ast_popl.ml b/popl09/ast_popl.ml new file mode 100644 index 0000000..79bcc6b --- /dev/null +++ b/popl09/ast_popl.ml @@ -0,0 +1,48 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +type sequence = + Seq of element * sequence + | Empty + | SExists of Ast_cocci.meta_name * sequence + +and term = + Atomic of Ast_cocci.rule_elem + | IfThen of term * term * Ast_cocci.end_info + | TExists of Ast_cocci.meta_name * term + +and element = + Term of term * dots_bef_aft + | Or of sequence * sequence + | DInfo of dots + | EExists of Ast_cocci.meta_name * element + +and dots = + Dots + | Nest of sequence + | When of dots * sequence + +and dots_bef_aft = + NoDots + | AddingBetweenDots of term * int (*index of let var*) + | DroppingBetweenDots of term * int (*index of let var*) + diff --git a/popl09/asttopopl.ml b/popl09/asttopopl.ml new file mode 100644 index 0000000..75f649c --- /dev/null +++ b/popl09/asttopopl.ml @@ -0,0 +1,98 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +module Ast = Ast_cocci +module Past = Ast_popl + +(* --------------------------------------------------------------------- *) + +let term s inif = + let fail _ = + Pretty_print_cocci.statement "" s; + Format.print_newline(); + failwith "complex statements not supported" in + match Ast.unwrap s with + Ast.Atomic(ast) -> + (match Ast.unwrap ast with + Ast.ExprStatement(_,_) -> Past.Atomic ast + | Ast.Exp(_) -> Past.Atomic ast + | Ast.Decl(_,_,_) -> Past.Atomic ast + | Ast.ReturnExpr(_,_,_) -> Past.Atomic ast + | Ast.MetaStmt(_,_,_,_) when inif -> Past.Atomic ast + | Ast.DisjRuleElem(_) -> Past.Atomic ast + | _ -> fail()) + | _ -> fail() + +let rec stm s = + match Ast.unwrap s with + Ast.Atomic(ast) -> Past.Term(term s false,dots_bef_aft s false) + | Ast.IfThen(header,body,aft) -> + Past.Term( + Past.IfThen(Past.Atomic header,term body true,aft), + dots_bef_aft s true) + | Ast.Disj(stm1::stm2::stmts) -> + List.fold_left + (function prev -> + function cur -> + Past.Or(Past.Seq(prev,Past.Empty),stm_list cur)) + (Past.Or(stm_list stm1,stm_list stm2)) stmts + | Ast.Dots(dots,whencodes,_,_) -> + Past.DInfo + (List.fold_left + (function prev -> + function + Ast.WhenNot(a) -> Past.When(prev,stm_list a) + | _ -> failwith "only when != supported") + Past.Dots whencodes) + | Ast.Nest(stmt_dots,whencodes,false,_,_) -> + let nest = Past.Nest(stm_list stmt_dots) in + Past.DInfo + (List.fold_left + (function prev -> + function + Ast.WhenNot(a) -> Past.When(prev,stm_list a) + | _ -> failwith "only when != supported") + nest whencodes) + | _ -> + Pretty_print_cocci.statement "" s; + failwith "unsupported statement3" + +and dots_bef_aft s inif = + match Ast.get_dots_bef_aft s with + Ast.AddingBetweenDots (brace_term,n) -> + Past.AddingBetweenDots (term brace_term inif,n) + | Ast.DroppingBetweenDots (brace_term,n) -> + Past.DroppingBetweenDots (term brace_term inif,n) + | Ast.NoDots -> Past.NoDots + +and stm_list s = + match Ast.unwrap s with + Ast.DOTS(d) -> + List.fold_right + (function cur -> function rest -> Past.Seq(stm cur, rest)) + d Past.Empty + | _ -> failwith "only DOTS handled" + +let top s = + match Ast.unwrap s with + Ast.CODE(stmt_dots) -> stm_list stmt_dots + | _ -> failwith "only CODE handled" diff --git a/popl09/asttopopl.mli b/popl09/asttopopl.mli new file mode 100644 index 0000000..d4d049f --- /dev/null +++ b/popl09/asttopopl.mli @@ -0,0 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +val top : Ast_cocci.top_level -> Ast_popl.sequence diff --git a/popl09/flag_popl.ml b/popl09/flag_popl.ml new file mode 100644 index 0000000..465d608 --- /dev/null +++ b/popl09/flag_popl.ml @@ -0,0 +1,24 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +let mark_all = ref false +let keep_all_wits = ref false diff --git a/popl09/insert_quantifiers.ml b/popl09/insert_quantifiers.ml new file mode 100644 index 0000000..df7d6f0 --- /dev/null +++ b/popl09/insert_quantifiers.ml @@ -0,0 +1,113 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +module Ast = Ast_cocci +module Past = Ast_popl + +(* --------------------------------------------------------------------- *) + +let rec fvs_sequence = function + Past.Seq(elem,seq) -> + Common.union_set (fvs_element elem) (fvs_sequence seq) + | Past.Empty -> [] + | Past.SExists(var,seq) -> failwith "not possible" + +and fvs_term = function + Past.Atomic(term) -> Ast.get_fvs term + | Past.IfThen(test,thn,(afvs,_,_,_)) -> + Common.union_set afvs + (Common.union_set (fvs_term test) (fvs_term thn)) + | Past.TExists(var,term) -> failwith "not possible" + +and fvs_element = function + Past.Term(term,_) -> fvs_term term + | Past.Or(seq1,seq2) -> + Common.union_set (fvs_sequence seq1) (fvs_sequence seq2) + | Past.DInfo(dots) -> fvs_dots dots + | Past.EExists(var,seq) -> failwith "not possible" + +and fvs_dots = function + Past.Dots -> [] + | Past.Nest(seq) -> fvs_sequence seq + | Past.When(dots,seq) -> Common.union_set (fvs_dots dots) (fvs_sequence seq) + +(* --------------------------------------------------------------------- *) + +let inter_set l1 l2 = List.filter (function l1e -> List.mem l1e l2) l1 + +let minus_set l1 l2 = List.filter (function l1e -> not (List.mem l1e l2)) l1 + +let rec quant_sequence bound = function + Past.Seq(elem,seq) -> + let fe = fvs_element elem in + let fs = fvs_sequence seq in + let inter = inter_set fe fs in + let free = minus_set inter bound in + let new_bound = free @ bound in + List.fold_right (function cur -> function rest -> Past.SExists(cur,rest)) + free (Past.Seq(quant_element new_bound elem, + quant_sequence new_bound seq)) + | Past.Empty -> Past.Empty + | Past.SExists(var,seq) -> failwith "not possible" + +and quant_term bound = function + (Past.Atomic(term)) as x -> + let free = minus_set (Ast.get_fvs term) bound in + List.fold_right (function cur -> function rest -> Past.TExists(cur,rest)) + free x + | Past.IfThen(test,thn,((afvs,_,_,_) as aft)) -> + let fts = fvs_term test in + let fth = fvs_term thn in + let inter = inter_set fts fth in + let free = minus_set inter bound in + let new_bound = free @ bound in + List.fold_right (function cur -> function rest -> Past.TExists(cur,rest)) + free (Past.IfThen(quant_term new_bound test, + quant_term new_bound thn, + aft)) + | Past.TExists(var,term) -> failwith "not possible" + +and quant_element bound = function + Past.Term(term,ba) -> + Past.Term(quant_term bound term,dots_bef_aft bound ba) + | Past.Or(seq1,seq2) -> + Past.Or(quant_sequence bound seq1,quant_sequence bound seq2) + | Past.DInfo(dots) -> + Past.DInfo(quant_dots bound dots) + | Past.EExists(var,seq) -> failwith "not possible" + +and dots_bef_aft bound = function + Past.AddingBetweenDots (brace_term,n) -> + Past.AddingBetweenDots (quant_term bound brace_term,n) + | Past.DroppingBetweenDots (brace_term,n) -> + Past.DroppingBetweenDots (quant_term bound brace_term,n) + | Past.NoDots -> Past.NoDots + +and quant_dots bound = function + Past.Dots -> Past.Dots + | Past.Nest(seq) -> Past.Nest(quant_sequence bound seq) + | Past.When(dots,seq) -> + Past.When(quant_dots bound dots, quant_sequence bound seq) + +(* --------------------------------------------------------------------- *) + +let insert_quantifiers x = quant_sequence [] x diff --git a/popl09/insert_quantifiers.mli b/popl09/insert_quantifiers.mli new file mode 100644 index 0000000..f0d7622 --- /dev/null +++ b/popl09/insert_quantifiers.mli @@ -0,0 +1,23 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +val insert_quantifiers : Ast_popl.sequence -> Ast_popl.sequence diff --git a/popl09/popl.ml b/popl09/popl.ml new file mode 100644 index 0000000..e35afcf --- /dev/null +++ b/popl09/popl.ml @@ -0,0 +1,38 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +type cocci_predicate = Lib_engine.predicate * Ast_cocci.meta_name Ast_ctl.modif +type formula = + (cocci_predicate,Ast_cocci.meta_name, Wrapper_ctl.info) Ast_ctl.generic_ctl + +let poplz (name,_,ast) = + match ast with + [ast] -> + let ast = Asttopopl.top ast in + let qt = Insert_quantifiers.insert_quantifiers ast in + [Popltoctl.toctl qt] + | _ -> failwith "only one rule allowed" + +let popl r = + match r with + Ast_cocci.CocciRule(a,b,c,_,Ast_cocci.Normal) -> poplz (a,b,c) + | _ -> [] diff --git a/popl09/popl.mli b/popl09/popl.mli new file mode 100644 index 0000000..8b813c2 --- /dev/null +++ b/popl09/popl.mli @@ -0,0 +1,27 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +type cocci_predicate = Lib_engine.predicate * Ast_cocci.meta_name Ast_ctl.modif +type formula = + (cocci_predicate,Ast_cocci.meta_name, Wrapper_ctl.info) Ast_ctl.generic_ctl + +val popl : Ast_cocci.rule -> formula list diff --git a/popl09/popltoctl.ml b/popl09/popltoctl.ml new file mode 100644 index 0000000..29d5696 --- /dev/null +++ b/popl09/popltoctl.ml @@ -0,0 +1,237 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +module Past = Ast_popl +module Ast = Ast_cocci +module V = Visitor_ast +module CTL = Ast_ctl + +(* --------------------------------------------------------------------- *) +(* result type *) + +type cocci_predicate = Lib_engine.predicate * Ast.meta_name Ast_ctl.modif +type formula = + (cocci_predicate,Ast_cocci.meta_name, Wrapper_ctl.info) Ast_ctl.generic_ctl + +(* --------------------------------------------------------------------- *) + +let contains_modif = + let bind x y = x or y in + let option_default = false in + let mcode r (_,_,kind,_) = + match kind with + Ast.MINUS(_,_,_,_) -> true + | Ast.PLUS _ -> failwith "not possible" + | Ast.CONTEXT(_,info) -> not (info = Ast.NOTHING) in + let do_nothing r k e = k e in + let rule_elem r k re = + let res = k re in + match Ast.unwrap re with + Ast.FunHeader(bef,_,fninfo,name,lp,params,rp) -> + bind (mcode r ((),(),bef,Ast.NoMetaPos)) res + | Ast.Decl(bef,_,decl) -> bind (mcode r ((),(),bef,Ast.NoMetaPos)) res + | _ -> res in + let recursor = + V.combiner bind option_default + mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode + do_nothing do_nothing do_nothing do_nothing + do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing + do_nothing rule_elem do_nothing do_nothing do_nothing do_nothing in + recursor.V.combiner_rule_elem + +let ctl_exists keep_wit v x = + CTL.Exists(!Flag_popl.keep_all_wits or keep_wit,v,x) + +let predmaker keep_wit term = + if (!Flag_popl.keep_all_wits or keep_wit) && + (!Flag_popl.mark_all or contains_modif term) + then + let v = ("","_v") in + ctl_exists true v + (CTL.Pred (Lib_engine.Match(term),CTL.Modif v)) + else CTL.Pred (Lib_engine.Match(term),CTL.Control) + +(* --------------------------------------------------------------------- *) + +let is_true = function CTL.True -> true | _ -> false + +let is_false = function CTL.False -> true | _ -> false + +let ctl_true = CTL.True + +let ctl_false = CTL.False + +let ctl_and x y = + if is_true x then y + else if is_true y then x else CTL.And(CTL.STRICT,x,y) + +let ctl_or x y = + if is_false x then y + else if is_false y then x else CTL.Or(x,y) + +let ctl_seqor x y = CTL.SeqOr(x,y) + +let ctl_not x = CTL.Not(x) + +let ctl_ax x = + if is_true x then CTL.True + else CTL.AX(CTL.FORWARD,CTL.STRICT,x) + +let ctl_ex x = + if is_true x then CTL.True + else CTL.EX(CTL.FORWARD,x) + +let ctl_back_ex x = + if is_true x then CTL.True + else CTL.EX(CTL.BACKWARD,x) + +let after = CTL.Pred(Lib_engine.After, CTL.Control) +let fall = CTL.Pred(Lib_engine.FallThrough, CTL.Control) +let exit = CTL.Pred(Lib_engine.Exit, CTL.Control) +let truepred = CTL.Pred(Lib_engine.TrueBranch, CTL.Control) +let falsepred = CTL.Pred(Lib_engine.FalseBranch, CTL.Control) +let retpred = CTL.Pred(Lib_engine.Return, CTL.Control) + +let string2var x = ("",x) + +let labelctr = ref 0 +let get_label_ctr _ = + let cur = !labelctr in + labelctr := cur + 1; + string2var (Printf.sprintf "l%d" cur) + +let ctl_au x y = CTL.AU(CTL.FORWARD,CTL.STRICT,x,y) + +let ctl_uncheck x = CTL.Uncheck(x) + +let make_meta_rule_elem d = + let nm = "_S" in + Ast.make_meta_rule_elem nm d ([],[],[]) + +(* --------------------------------------------------------------------- *) + +let rec ctl_seq keep_wit a = function + Past.Seq(elem,seq) -> + ctl_element keep_wit (ctl_seq keep_wit a seq) elem + | Past.Empty -> a + | Past.SExists(var,seq) -> ctl_exists keep_wit var (ctl_seq keep_wit a seq) + +and ctl_term keep_wit a = function + Past.Atomic(term) -> ctl_and (predmaker keep_wit term) (ctl_ax a) + | Past.IfThen(test,thn,(_,_,_,aft)) -> ifthen keep_wit (Some a) test thn aft + | Past.TExists(var,term) -> + ctl_exists keep_wit var (ctl_term keep_wit a term) + +and ctl_element keep_wit a = function + Past.Term(term,ba) -> + do_between_dots keep_wit ba (ctl_term keep_wit a term) a + | Past.Or(seq1,seq2) -> + ctl_seqor (ctl_seq keep_wit a seq1) (ctl_seq keep_wit a seq2) + | Past.DInfo(dots) -> ctl_au (guard_ctl_dots keep_wit a dots) a + | Past.EExists(var,elem) -> + ctl_exists keep_wit var (ctl_element keep_wit a elem) + +(* --------------------------------------------------------------------- *) + +and guard_ctl_seq keep_wit a = function + Past.Seq(elem,Past.Empty) -> guard_ctl_element keep_wit a elem + | Past.Seq(elem,seq) -> + ctl_element keep_wit (guard_ctl_seq keep_wit a seq) elem + | Past.Empty -> ctl_true + | Past.SExists(var,seq) -> + ctl_exists keep_wit var (guard_ctl_seq keep_wit a seq) + +and guard_ctl_term keep_wit = function + Past.Atomic(term) -> predmaker keep_wit term + | Past.IfThen(test,thn,(_,_,_,aft)) -> ifthen keep_wit None test thn aft + | Past.TExists(var,term) -> + ctl_exists keep_wit var (guard_ctl_term keep_wit term) + +and guard_ctl_element keep_wit a = function + Past.Term(term,_) -> guard_ctl_term keep_wit term + | Past.Or(seq1,seq2) -> + ctl_seqor + (guard_ctl_seq keep_wit a seq1) (guard_ctl_seq keep_wit a seq2) + | Past.DInfo(dots) -> ctl_au (guard_ctl_dots keep_wit a dots) a + | Past.EExists(var,elem) -> + ctl_exists keep_wit var (guard_ctl_element keep_wit a elem) + +and guard_ctl_dots keep_wit a = function + Past.Dots -> ctl_true +(* | Past.Nest(_) when not keep_wit -> ctl_true + a possible optimization, but irrelevant to popl example *) + | Past.Nest(seq) -> + ctl_or + (guard_ctl_seq true a seq) + (ctl_not (guard_ctl_seq false a seq)) + | Past.When(dots,seq) -> + ctl_and + (guard_ctl_dots keep_wit a dots) + (ctl_not (guard_ctl_seq false a seq)) + +(* --------------------------------------------------------------------- *) + +and ifthen keep_wit a test thn aft = +(* "if (test) thn; after" becomes: + if(test) & AX((TrueBranch & AX thn) v FallThrough v (After & AXAX after)) + & EX After + (* doesn't work for C code if (x) return 1; else return 2; *) +*) + let end_code = + match (aft,a) with + (Ast.CONTEXT(_,Ast.NOTHING),None) -> ctl_true + | (Ast.CONTEXT(_,Ast.NOTHING),Some a) -> ctl_ax (ctl_ax a) + | (_,None) -> failwith "not possible" + | (_,Some a) -> + ctl_ax + (ctl_and + (predmaker keep_wit (make_meta_rule_elem aft)) + (ctl_ax a)) in + let body = + ctl_or + (ctl_and truepred + (ctl_ax + (guard_ctl_term keep_wit thn))) + (ctl_or fall + (ctl_and after end_code)) in + ctl_and (ctl_term keep_wit body test) + (match a with Some CTL.True | None -> ctl_true | Some _ -> ctl_ex after) + +and do_between_dots keep_wit ba term after = + match ba with + Past.AddingBetweenDots (brace_term,n) + | Past.DroppingBetweenDots (brace_term,n) -> + (* not sure at all what to do here for after... *) + let match_brace = ctl_term keep_wit after brace_term in + let v = Printf.sprintf "_r_%d" n in + let case1 = ctl_and (CTL.Ref v) match_brace in + let case2 = ctl_and (ctl_not (CTL.Ref v)) term in + CTL.Let + (v,ctl_or + (ctl_back_ex truepred) + (ctl_back_ex (ctl_back_ex falsepred)), + ctl_or case1 case2) + | Past.NoDots -> term + +(* --------------------------------------------------------------------- *) + +let toctl sl = ctl_seq true ctl_true sl diff --git a/popl09/popltoctl.mli b/popl09/popltoctl.mli new file mode 100644 index 0000000..0ddbb6d --- /dev/null +++ b/popl09/popltoctl.mli @@ -0,0 +1,27 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +type cocci_predicate = Lib_engine.predicate * Ast_cocci.meta_name Ast_ctl.modif +type formula = + (cocci_predicate,Ast_cocci.meta_name, Wrapper_ctl.info) Ast_ctl.generic_ctl + +val toctl : Ast_popl.sequence -> formula diff --git a/popl09/pretty_print_popl.ml b/popl09/pretty_print_popl.ml new file mode 100644 index 0000000..8364ac4 --- /dev/null +++ b/popl09/pretty_print_popl.ml @@ -0,0 +1,97 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +open Format +module Past = Ast_popl +module Ast = Ast_cocci + +let start_block str = + force_newline(); print_string " "; open_box 0 + +let end_block str = + close_box(); force_newline () + +(* --------------------------------------------------------------------- *) + +let print_around printer term = function + Ast.NOTHING -> printer term + | Ast.BEFORE(bef,_) -> + Pretty_print_cocci.print_anything "<<< " bef; printer term + | Ast.AFTER(aft,_) -> + printer term; Pretty_print_cocci.print_anything ">>> " aft + | Ast.BEFOREAFTER(bef,aft,_) -> + Pretty_print_cocci.print_anything "<<< " bef; printer term; + Pretty_print_cocci.print_anything ">>> " aft + +let mcode fn = function + (x, _, Ast.MINUS(_,_,_,plus_stream), pos) -> + print_string "-"; fn x; + Pretty_print_cocci.print_anything ">>> " plus_stream + | (x, _, Ast.CONTEXT(_,plus_streams), pos) -> + print_around fn x plus_streams + | (x, info, Ast.PLUS _, pos) -> fn x + +(* --------------------------------------------------------------------- *) + +let rec print_sequence = function + Past.Seq(e,seq) -> print_element e; force_newline(); print_sequence seq + | Past.Empty -> () + | Past.SExists((_,v),seq) -> print_string "exists "; print_string v; + print_string " ."; force_newline(); print_sequence seq + +and print_term = function + Past.Atomic(term) -> Pretty_print_cocci.rule_elem "" term + | Past.IfThen(test,thn,(_,_,_,aft)) -> + print_term test; print_term thn; + mcode (function _ -> ()) ((),Ast.no_info,aft,Ast.NoMetaPos) + | Past.TExists((_,v),term) -> print_string "exists "; print_string v; + print_string " ."; force_newline(); print_term term + +and print_element = function + Past.Term(term,_) -> print_term term + | Past.Or(seq1,seq2) -> + force_newline(); print_string "("; force_newline(); print_sequence seq1; + print_string "|"; force_newline(); print_sequence seq2; print_string ")" + | Past.DInfo(dots) -> + start_block(); + print_dots dots; + end_block() + | Past.EExists((_,v),elem) -> print_string "exists "; print_string v; + print_string " ."; force_newline(); print_element elem + +and print_dots = function + Past.Dots -> print_string "..." + | Past.Nest(seq)-> print_string "<..."; start_block(); print_sequence seq; + end_block(); print_string "...>" + | Past.When(dots,seq) -> print_dots dots; print_string " when != "; + open_box 0; print_sequence seq; close_box() + +(* --------------------------------------------------------------------- *) + +let pretty_print_e e = + print_element e; + print_newline() + +let pretty_print sl = + print_sequence sl; + print_newline() + diff --git a/popl09/pretty_print_popl.mli b/popl09/pretty_print_popl.mli new file mode 100644 index 0000000..5193f26 --- /dev/null +++ b/popl09/pretty_print_popl.mli @@ -0,0 +1,24 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +val pretty_print : Ast_popl.sequence -> unit +val pretty_print_e : Ast_popl.element -> unit diff --git a/python/Makefile b/python/Makefile index 16a9407..0db70e2 100644 --- a/python/Makefile +++ b/python/Makefile @@ -1,19 +1,19 @@ # Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix # This file is part of Coccinelle. -# +# # Coccinelle is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, according to version 2 of the License. -# +# # Coccinelle is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with Coccinelle. If not, see . -# +# # The authors reserve the right to distribute this or future versions of # Coccinelle under other licenses. diff --git a/python/coccilib/org.py b/python/coccilib/org.py new file mode 100644 index 0000000..23b6d38 --- /dev/null +++ b/python/coccilib/org.py @@ -0,0 +1,9 @@ +def print_main(msg, p, color="ovl-face1") : + print "* TODO [[view:%s::face=%s::linb=%s::colb=%s::cole=%s][%s %s::%s]]" % (p[0].file,color,p[0].line,p[0].column,p[0].column_end,msg,p[0].file,p[0].line) + +def print_sec(msg, p, color="ovl-face2") : + print "[[view:%s::face=%s::linb=%s::colb=%s::cole=%s][%s]]" % (p[0].file,color,p[0].line,p[0].column,p[0].column_end,msg) + +def print_secs(msg, ps, color="ovl-face2") : + for i in ps: + print "[[view:%s::face=%s::linb=%s::colb=%s::cole=%s][%s]]" % (i.file,color,i.line,i.column,i.column_end,msg) diff --git a/python/coccilib/output_base.py b/python/coccilib/output_base.py index 0f0a6f0..089e1e5 100644 --- a/python/coccilib/output_base.py +++ b/python/coccilib/output_base.py @@ -1,5 +1,3 @@ -from threading import Thread, Lock -import time from copy import deepcopy class Output: @@ -29,15 +27,17 @@ class Output: def finalise(self): pass - def print_main(self, msg, p) : - print "* TODO [[view:%s::face=ovl-face1::linb=%s::colb=%s::cole=%s][%s %s::%s]]" % (p[0].file,p[0].line,p[0].column,p[0].column_end,msg,p[0].file,p[0].line) + def print_main (self, *args): + from coccilib.org import print_main + print_main(*args) - def print_sec(self, msg, p) : - print "[[view:%s::face=ovl-face2::linb=%s::colb=%s::cole=%s][%s]]" % (p[0].file,p[0].line,p[0].column,p[0].column_end,msg) + def print_sec (self, *args): + from coccilib.org import print_sec + print_sec(*args) - def print_secs(self, msg, ps) : - for i in ps: - print "[[view:%s::face=ovl-face2::linb=%s::colb=%s::cole=%s][%s]]" % (i.file,i.line,i.column,i.column_end,msg) + def print_secs (self, *args): + from coccilib.org import print_secs + print_secs(*args) class Console(Output): def __init__(self): @@ -49,8 +49,10 @@ class Console(Output): for variable, message in messages: print "%s:%s:%s: %s - %s" % (variable.location.file, variable.location.line, variable.location.column, message, variable) +from threading import Thread class GtkRunner(Thread): def __init__(self): + from threading import Lock Thread.__init__(self) self.lock = Lock() self.rows = [] @@ -80,12 +82,15 @@ class GtkRunner(Thread): self.lock.release() def update(self): + import gobject while self.has_row(): cocci, l = self.get_row() self.gui.add_result(cocci, l) gobject.timeout_add(1000, self.update) def run(self): + import gtk,gobject + import coccilib.coccigui.coccigui self.gui = coccilib.coccigui.coccigui.pycocci() globals()['gtk_sock'] = self.gui gobject.timeout_add(1000, self.update) @@ -102,6 +107,7 @@ class GtkRunner(Thread): class Gtk(Output): def check_availability(self): + import time if not globals().has_key('gtk_sock'): t = GtkRunner() globals()['gtk_thread'] = t diff --git a/python/coccilib/output_gui.py b/python/coccilib/output_gui.py deleted file mode 100644 index 65f0473..0000000 --- a/python/coccilib/output_gui.py +++ /dev/null @@ -1,125 +0,0 @@ -import pygtk -import gtk, gobject -import coccilib.coccigui -import coccilib.coccigui.coccigui -from threading import Thread, Lock -import time -from copy import deepcopy - -class Output: - """In order to implement an output class for use with Coccinelle, - one can inherit from this class and overload register_match with - the same number of arguments. - - include_match will be overwritten by inheriting from your actual - class, and thus if your class is a.b.C then Coccinelle will create - a Python class "class Coccinelle(a.b.C)" that hooks include_match - into the O'Caml internals. - """ - def include_match(self, b): - pass - - def register_match(self, include, messages): - pass - - def combine(self, meta_variable, locations): - nmv = deepcopy(meta_variable) - nloc = [deepcopy(loc) for loc in locations] - nmv.location = nloc[0] - nmv.locations = nloc - - return nmv - - def finalise(self): - pass - - def print_main(self, msg, p) : - print "* TODO [[view:%s::face=ovl-face1::linb=%s::colb=%s::cole=%s][%s %s::%s]]" % (p[0].file,p[0].line,p[0].column,p[0].column_end,msg,p[0].file,p[0].line) - - def print_sec(self, msg, p) : - print "[[view:%s::face=ovl-face2::linb=%s::colb=%s::cole=%s][%s]]" % (p[0].file,p[0].line,p[0].column,p[0].column_end,msg) - - def print_secs(self, msg, ps) : - for i in ps: - print "[[view:%s::face=ovl-face2::linb=%s::colb=%s::cole=%s][%s]]" % (i.file,i.line,i.column,i.column_end,msg) - -class Console(Output): - def __init__(self): - pass - - def register_match(self, include, messages): - self.include_match(include) - if include: - for variable, message in messages: - print "%s:%s:%s: %s - %s" % (variable.location.file, variable.location.line, variable.location.column, message, variable) - -class GtkRunner(Thread): - def __init__(self): - Thread.__init__(self) - self.lock = Lock() - self.rows = [] - - def add_row(self, cocci, l): - for i in xrange(0, len(l)): - l[i] = (l[i][1], l[i][0].location.file, l[i][0].location.line, l[i][0].location.column) - - self.lock.acquire() - try: - self.rows.append((cocci, l)) - finally: - self.lock.release() - - def has_row(self): - self.lock.acquire() - try: - return len(self.rows) > 0 - finally: - self.lock.release() - - def get_row(self): - self.lock.acquire() - try: - return self.rows.pop(0) - finally: - self.lock.release() - - def update(self): - while self.has_row(): - cocci, l = self.get_row() - self.gui.add_result(cocci, l) - gobject.timeout_add(1000, self.update) - - def run(self): - self.gui = coccilib.coccigui.coccigui.pycocci() - globals()['gtk_sock'] = self.gui - gobject.timeout_add(1000, self.update) - - gtk.gdk.threads_init() - gtk.gdk.threads_enter() - - gtk.main() - - gtk.gdk.threads_leave() - - globals().pop('gtk_thread') - globals().pop('gtk_sock') - -class Gtk(Output): - def check_availability(self): - if not globals().has_key('gtk_sock'): - t = GtkRunner() - globals()['gtk_thread'] = t - globals()['gtk_thread'].start() - time.sleep(2) - - def register_match(self, include, messages): - self.check_availability() - - self.include_match(include) - if include: - globals()['gtk_thread'].add_row(self.cocci_file, messages) - - def finalise(self): - self.check_availability() - - globals()['gtk_thread'].join() diff --git a/python/coccilib/output_trac.py b/python/coccilib/output_trac.py dissimilarity index 90% index 1317064..c4ff457 100644 --- a/python/coccilib/output_trac.py +++ b/python/coccilib/output_trac.py @@ -1,139 +1,13 @@ -import pygtk -import gtk, gobject -import coccilib.coccigui -import coccilib.coccigui.coccigui -from threading import Thread, Lock -import time -from copy import deepcopy -import psycopg2 -from datetime import date, datetime -from trac.util.datefmt import to_timestamp, utc - - -class Output: - """In order to implement an output class for use with Coccinelle, - one can inherit from this class and overload register_match with - the same number of arguments. - - include_match will be overwritten by inheriting from your actual - class, and thus if your class is a.b.C then Coccinelle will create - a Python class "class Coccinelle(a.b.C)" that hooks include_match - into the O'Caml internals. - """ - def include_match(self, b): - pass - - def register_match(self, include, messages): - pass - - def combine(self, meta_variable, locations): - nmv = deepcopy(meta_variable) - nloc = [deepcopy(loc) for loc in locations] - nmv.location = nloc[0] - nmv.locations = nloc - - return nmv - - def finalise(self): - pass - - def print_main(self, p) : - print "* TODO [[view:%s::face=ovl-face1::linb=%s::colb=%s::cole=%s][%s::%s]]" % (p[0].file,p[0].line,p[0].column,p[0].column_end,p[0].file,p[0].line) - - def print_sec(self, msg, p) : - print "[[view:%s::face=ovl-face2::linb=%s::colb=%s::cole=%s][%s]]" % (p[0].file,p[0].line,p[0].column,p[0].column_end,msg) - - def print_secs(self, msg, ps) : - for i in ps: - print "[[view:%s::face=ovl-face2::linb=%s::colb=%s::cole=%s][%s]]" % (i.file,i.line,i.column,i.column_end,msg) - - def add_ticket(self, dbinfo, summary, desc) : - conn = psycopg2.connect(dbinfo) - curs = conn.cursor() - created = to_timestamp(datetime.now(utc)) - curs.execute("INSERT INTO ticket \ - (type,time,changetime,component,priority,owner,reporter,cc,version,milestone,status,summary,description, keywords) \ - VALUES \ - ('defect', %s, %s, 'other','major','somebody','Coccinelle','','next','','new','%s','%s', '')" % (created, created, summary, desc) ) - conn.commit() - -class Console(Output): - def __init__(self): - pass - - def register_match(self, include, messages): - self.include_match(include) - if include: - for variable, message in messages: - print "%s:%s:%s: %s - %s" % (variable.location.file, variable.location.line, variable.location.column, message, variable) - -class GtkRunner(Thread): - def __init__(self): - Thread.__init__(self) - self.lock = Lock() - self.rows = [] - - def add_row(self, cocci, l): - for i in xrange(0, len(l)): - l[i] = (l[i][1], l[i][0].location.file, l[i][0].location.line, l[i][0].location.column) - - self.lock.acquire() - try: - self.rows.append((cocci, l)) - finally: - self.lock.release() - - def has_row(self): - self.lock.acquire() - try: - return len(self.rows) > 0 - finally: - self.lock.release() - - def get_row(self): - self.lock.acquire() - try: - return self.rows.pop(0) - finally: - self.lock.release() - - def update(self): - while self.has_row(): - cocci, l = self.get_row() - self.gui.add_result(cocci, l) - gobject.timeout_add(1000, self.update) - - def run(self): - self.gui = coccilib.coccigui.coccigui.pycocci() - globals()['gtk_sock'] = self.gui - gobject.timeout_add(1000, self.update) - - gtk.gdk.threads_init() - gtk.gdk.threads_enter() - - gtk.main() - - gtk.gdk.threads_leave() - - globals().pop('gtk_thread') - globals().pop('gtk_sock') - -class Gtk(Output): - def check_availability(self): - if not globals().has_key('gtk_sock'): - t = GtkRunner() - globals()['gtk_thread'] = t - globals()['gtk_thread'].start() - time.sleep(2) - - def register_match(self, include, messages): - self.check_availability() - - self.include_match(include) - if include: - globals()['gtk_thread'].add_row(self.cocci_file, messages) - - def finalise(self): - self.check_availability() - - globals()['gtk_thread'].join() +import psycopg2 +from datetime import date, datetime +from trac.util.datefmt import to_timestamp, utc + +def add_ticket(self, dbinfo, summary, desc) : + conn = psycopg2.connect(dbinfo) + curs = conn.cursor() + created = to_timestamp(datetime.now(utc)) + curs.execute("INSERT INTO ticket \ + (type,time,changetime,component,priority,owner,reporter,cc,version,milestone,status,summary,description, keywords) \ + VALUES \ + ('defect', %s, %s, 'other','major','somebody','Coccinelle','','next','','new','%s','%s', '')" % (created, created, summary, desc) ) + conn.commit() diff --git a/python/no_pycocci.ml b/python/no_pycocci.ml index a371f2c..f3aa8a8 100644 --- a/python/no_pycocci.ml +++ b/python/no_pycocci.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Ast_c diff --git a/python/no_pycocci_aux.ml b/python/no_pycocci_aux.ml index 9d4ee97..0867b6c 100644 --- a/python/no_pycocci_aux.ml +++ b/python/no_pycocci_aux.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Ast_c diff --git a/python/yes_pycocci.ml b/python/yes_pycocci.ml index 8de88e0..f6e272f 100644 --- a/python/yes_pycocci.ml +++ b/python/yes_pycocci.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Ast_c diff --git a/python/yes_pycocci_aux.ml b/python/yes_pycocci_aux.ml index faa995b..3a0f0d9 100644 --- a/python/yes_pycocci_aux.ml +++ b/python/yes_pycocci_aux.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Ast_c diff --git a/scripts/coccicheck/Makefile b/scripts/coccicheck/Makefile new file mode 100644 index 0000000..6a03dd3 --- /dev/null +++ b/scripts/coccicheck/Makefile @@ -0,0 +1,52 @@ +PREFIX?=/tobedefine +PROJECT?=/myproject +SPFLAGS?="-timeout 60" # -use_glimpse -D diff + +COCCI?=/tobedefine/cocci +RESULTS?=/tobedefine/results + +.PHONY:: update viewlog viewfilteredlog viewres checkcocci +.PHONY:: all clean distclean depend + +all: + $(MAKE) -C $(RESULTS) + +update: + ./bin/update_result_tree $(PREFIX) $(PROJECT) $(COCCI) $(RESULTS) $(SPFLAGS) + +viewlog: + find $(RESULTS) -name "*.log" | xargs cat | less + +viewfilteredlog: + find $(RESULTS) -name "*.log" | xargs cat | \ + grep -ve "^$$" | \ + grep -v "HANDLING" | \ + grep -v "NOTE" | \ + grep -v "Unsupported form of #define" | \ + grep -v "no glimpse keyword inferred from snippet" | \ + grep -v "EXN:Common.Timeout" | \ + grep -v "FLOW: can't find exit or error exit:" | \ + grep -v "FLOW: deadcode detected:" | \ + grep -v "LEXER: identifier with dollar:" | \ + grep -v "LEXER: unrecognised symbol in char:" | \ + grep -v "LEXER: ZARB" | \ + grep -v "CFG: orphelin nodes, maybe something weird happened" | \ + grep -v "not worth trying" | \ + grep -v "MultiFound field:" | \ + grep -ve "(ONCE) warning: I consider .* as a constant" | \ + grep -ve "TYPE: header .* not found" + +viewres: + find $(RESULTS) -name "*.out" | xargs less + +checkcocci: + for c in `find $(COCCI) -name "*.cocci"`; do spatch -parse_cocci $$c > /dev/null ; done + +clean: + find $(RESULTS) -name "*.out" -delete + find $(RESULTS) -name "*.log" -delete + +distclean: + rm -rf $(RESULTS) + +depend: update diff --git a/scripts/coccicheck/README b/scripts/coccicheck/README new file mode 100644 index 0000000..6044c75 --- /dev/null +++ b/scripts/coccicheck/README @@ -0,0 +1,36 @@ + + Coccicheck version 0.1 + + -*- Usage -*- + + 1) ./configure mode + This will setup some default directories. + Check if they suit you! + mode is either org or diff, depending on whether you want the + output in Emacs org mode, or in diff format where - indicates not + something to remove but an item of interest. + + 2) make update + This will create the `results` directory. + It will contain all the files needed + to apply the SmPL files to your project. + + 3) make [-jX] (where X is the number of cores to use) + This will apply all the SmPL files found in + the `cocci` directory to your project + (as previously defined). + +When it's done, you will get some "out" and "log" files in the +`results` directory. "out" files will contain the output generated by +the SmPL files, and the "log" files will contain the execution trace +of spatch. + +If you edit/add some SmPL files in `cocci` directory, you can use +`make checkcocci` to parse them and see if there is any error. + +Once the results are computed, you can either: + - run `make viewres` to view all the results + - run `make viewlog` to view the complete trace + - run `make viewfilteredlog` to view the most important part of the trace + + diff --git a/scripts/coccicheck/bin/update_result_tree b/scripts/coccicheck/bin/update_result_tree new file mode 100755 index 0000000..17231cd --- /dev/null +++ b/scripts/coccicheck/bin/update_result_tree @@ -0,0 +1,68 @@ +#!/bin/bash + +echo "Using PREFIX="${PREFIX:=$1} +echo "Using PROJECT="${PROJECT:=$2} +echo "Using COCCI="${COCCI:=$3} +echo "Using RESULTS="${RESULTS:=$4} +echo "Using SPFLAGS="${SPFLAGS:=$5} + +#echo "Using PREFIX="${PREFIX:=`pwd`} +#echo "Using COCCI="${COCCI:=$PREFIX/cocci} +#echo "Using PROJECT="${PROJECT:=$PREFIX/project} +#echo "Using RESULTS="${RESULTS:=$PREFIX/results} + +SMPL=`find $COCCI -mindepth 1 -type f -name "*.cocci"| sed "s|$COCCI/||g"` + +PRJNAME=`basename $PROJECT` + +echo "Processing project \"$PRJNAME\"" + +mkdir -p $RESULTS/ + +for s in $SMPL;do + + f=`basename $s .cocci` + + # Produce bug report for a particular version and a particular bug pattern + echo "#!/bin/bash" > $RESULTS/$f.sh + echo "" >> $RESULTS/$f.sh + echo "FLAGS=\"`grep -E \"// +Options *:\" $COCCI/$s | cut -f2 -d\":\"`\"" >> $RESULTS/$f.sh + echo "INC=$PROJECT/include" >> $RESULTS/$f.sh + echo "echo \"Applying $COCCI/$s with: '\$FLAGS'\"" >> $RESULTS/$f.sh + echo "nice -19 spatch.opt $SPFLAGS \$FLAGS -I \$INC -cocci_file $COCCI/$s -dir $PROJECT/ $FLAGS \\" >> $RESULTS/$f.sh + echo "> $f.out \\" >> $RESULTS/$f.sh + echo "2> $f.log" >> $RESULTS/$f.sh + echo "echo \"$f.out completed\"" >> $RESULTS/$f.sh + chmod u+x $RESULTS/$f.sh + +done # s in $SMPL + + +############################################# +# Fill the Makefile +############################################# +# Generation of a Makefile per project +echo -e ".SUFFIXES: .out .sh\n" > $RESULTS/Makefile +echo -e "all: out\n" >> $RESULTS/Makefile +echo -e ".sh.out:" >> $RESULTS/Makefile +echo -e "\t-@./\$<\n" >> $RESULTS/Makefile + +ALL_SMPL=`echo -n "out:"` + +for s in $SMPL;do + f=`basename $s .cocci` + +# echo "$f.out:" >> $RESULTS/Makefile +# echo " -./$f.sh" >> $RESULTS/Makefile + ALL_SMPL="$ALL_SMPL $f.out" + +done # s + +echo "$ALL_SMPL" >> $RESULTS/Makefile + +############################################# + +# Cleanup dead links +find -L $RESULTS -type l -delete +# Cleanup empty dir. +find results/ -depth -type d -empty -delete diff --git a/scripts/coccicheck/cocci/badzero.cocci b/scripts/coccicheck/cocci/badzero.cocci new file mode 100644 index 0000000..2cd8084 --- /dev/null +++ b/scripts/coccicheck/cocci/badzero.cocci @@ -0,0 +1,36 @@ +// A pointer should not be compared to zero +// +// Confidence: High +// Copyright: (C) Gilles Muller, Julia Lawall, EMN, DIKU. GPLv2. +// URL: http://coccinelle.lip6.fr/rules/badzero.html +// Options: + +virtual org,diff + +@r disable is_zero,isnt_zero @ +expression *E; +position p; +@@ + +( + E@p == 0 +| + E@p != 0 +| + 0 == E@p +| + 0 != E@p +) + +@script:python depends on org@ +p << r.p; +@@ + +cocci.print_main("",p) + +@depends on diff@ +position r.p; +expression E; +@@ + +*E@p diff --git a/scripts/coccicheck/cocci/empty.cocci.model b/scripts/coccicheck/cocci/empty.cocci.model new file mode 100644 index 0000000..c21076d --- /dev/null +++ b/scripts/coccicheck/cocci/empty.cocci.model @@ -0,0 +1 @@ +@@@@ -NicolasPalix() diff --git a/scripts/coccicheck/cocci/find_unsigned.cocci b/scripts/coccicheck/cocci/find_unsigned.cocci new file mode 100644 index 0000000..ecfac9a --- /dev/null +++ b/scripts/coccicheck/cocci/find_unsigned.cocci @@ -0,0 +1,28 @@ +// A variable that is declared as unsigned should not be tested to be less than +// zero. +// +// Confidence: High +// Copyright: (C) Gilles Muller, Julia Lawall, EMN, DIKU. GPLv2. +// URL: http://www.emn.fr/x-info/coccinelle/rules/find_unsigned.html +// Options: -all_includes + +virtual org,diff + +@u@ type T; unsigned T i; position p; @@ + + i@p < 0 + +@script:python depends on org@ +p << u.p; +@@ + +cocci.print_main("",p) + +@depends on diff@ +expression i; +position u.p; +@@ + +*i@p + + diff --git a/scripts/coccicheck/cocci/isnull.cocci b/scripts/coccicheck/cocci/isnull.cocci new file mode 100644 index 0000000..7230ea1 --- /dev/null +++ b/scripts/coccicheck/cocci/isnull.cocci @@ -0,0 +1,41 @@ +// Dereference of an expression that has been checked to be NULL +// +// Confidence: Moderate +// Copyright: (C) Gilles Muller, Julia Lawall, EMN, DIKU. GPLv2. +// URL: http://www.emn.fr/x-info/coccinelle/rules/isnull.html +// Options: + +virtual org,diff + +@r exists@ +expression E, E1; +identifier f; +statement S1,S2,S3; +position p; +iterator iter; +@@ + +if (E == NULL) +{ + ... when != if (E == NULL && ...) S1 else S2 + when != if (E == NULL || ...) S1 else S2 + when != iter(E,...) S1 + when != E = E1 + E@p->f + ... when any + return ...; +} +else S3 + +@script:python depends on org@ +p << r.p; +@@ + +cocci.print_main("",p) + +@depends on diff@ +expression E; +position r.p; +@@ + +* E@p diff --git a/scripts/coccicheck/cocci/kmalloc7.cocci b/scripts/coccicheck/cocci/kmalloc7.cocci new file mode 100644 index 0000000..3d2ca7b --- /dev/null +++ b/scripts/coccicheck/cocci/kmalloc7.cocci @@ -0,0 +1,76 @@ +// +// kmalloc 7 +// +// + +virtual org,diff + +@r exists@ +local idexpression x; +statement S; +expression E; +identifier f,l; +position p1,p2,p3; +expression *ptr != NULL; +@@ + +( +if ((x@p1 = \(kmalloc\|kzalloc\|kcalloc\)(...)) == NULL) S +| +x@p1 = \(kmalloc\|kzalloc\|kcalloc\)(...); +... +if (x == NULL) S +) +<... when != x + when != if (...) { <+...x...+> } +( +goto@p3 l; +| +x->f = E +) +...> +( + return \(0\|<+...x...+>\|ptr\); +| + return@p2 ...; +) + +@script:python depends on org@ +p1 << r.p1; +p2 << r.p2; +p3 << r.p3; +@@ + +cocci.print_main("",p1) +cocci.print_secs("", p2) +cocci.print_secs("goto", p3) +cocci.include_match(False) + +@script:python depends on org@ +p1 << r.p1; +p2 << r.p2; +@@ + +cocci.print_main("",p1) +cocci.print_secs("", p2) + +@with_goto depends on diff@ +expression x; +identifier l; +position r.p1, r.p2, r.p3; +@@ + +*x@p1 +... +*goto@p3 l; +... +*return@p2 ...; + +@depends on diff && !with_goto@ +expression x; +position r.p1, r.p2; +@@ + +*x@p1 +... +*return@p2 ...; diff --git a/scripts/coccicheck/cocci/malloc.cocci b/scripts/coccicheck/cocci/malloc.cocci new file mode 100644 index 0000000..c060ac5 --- /dev/null +++ b/scripts/coccicheck/cocci/malloc.cocci @@ -0,0 +1,76 @@ +// +// malloc 7 +// +// + +virtual diff, org + +@r exists@ +local idexpression x; +statement S; +expression E; +identifier f,l; +position p1,p2,p3; +expression *ptr != NULL; +@@ + +( +if ((x@p1 = malloc(...)) == NULL) S +| +x@p1 = malloc(...); +... +if (x == NULL) S +) +<... when != x + when != if (...) { <+...x...+> } +( +goto@p3 l; +| +x->f = E +) +...> +( + return \(0\|<+...x...+>\|ptr\); +| + return@p2 ...; +) + +@script:python depends on org@ +p1 << r.p1; +p2 << r.p2; +p3 << r.p3; +@@ + +cocci.print_main("",p1) +cocci.print_secs("", p2) +cocci.print_secs("goto", p3) +cocci.include_match(False) + +@script:python depends on org@ +p1 << r.p1; +p2 << r.p2; +@@ + +cocci.print_main("",p1) +cocci.print_secs("", p2) + +@with_goto depends on diff@ +expression x; +identifier l; +position r.p1, r.p2, r.p3; +@@ + +*x@p1 +... +*goto@p3 l; +... +*return@p2 ...; + +@depends on diff && !with_goto@ +expression x; +position r.p1, r.p2; +@@ + +*x@p1 +... +*return@p2 ...; diff --git a/scripts/coccicheck/cocci/notand.cocci b/scripts/coccicheck/cocci/notand.cocci new file mode 100644 index 0000000..8cc435e --- /dev/null +++ b/scripts/coccicheck/cocci/notand.cocci @@ -0,0 +1,33 @@ +// !x&y combines boolean negation with bitwise and +// +// Confidence: High +// Copyright: (C) Gilles Muller, Julia Lawall, EMN, DIKU. GPLv2. +// URL: http://www.emn.fr/x-info/coccinelle/rules/notand.html +// Options: -macro_file_builtins ../cocci/notand.h + +virtual org,diff + +@r disable unlikely,likely @ +expression E; +constant C; +position p; +@@ + +( + !E & !C +| + !@p E & C +) + +@script:python depends on org@ +p << r.p; +@@ + +cocci.print_main("",p) + +@depends on diff@ +expression E; +position r.p; +@@ + +* !@p E diff --git a/scripts/coccicheck/cocci/notand.h b/scripts/coccicheck/cocci/notand.h new file mode 100644 index 0000000..4c8456e --- /dev/null +++ b/scripts/coccicheck/cocci/notand.h @@ -0,0 +1,828 @@ +// **************************************************************************** +// Prelude, this file is used with -macro_file_builtins option of the C parser +// **************************************************************************** + +/* This file contains: + * - macros found in <.h> + * - macros found in ".h" + * but where we cant detect that it will be a "bad macro" + * - hints, cf below. + * + * A "bad macro" is a macro using free variables or when expanded + * that influence the control-flow of the code. In those cases it + * is preferable to expand the macro so that the coccinelle engine + * has a more accurate representation of what is going on. + * + * + * + * + * old: this file was also containing what is below but now we + * try to expand on demand the macro found in the c file, so those cases + * are not needed any more: + * - macros found in .c; macros that cannot be parsed. + * In the future should be autodetected + * (not so easy to do same for macros in .h cos require to access .h file) + * - macros found in .c; macros correctly parsed + * but where we cant detect that it will be a "bad macro" + * + * Some of those macros could be deleted and the C code rewritten because + * they are "bad" macros. + * + * todo? perhaps better if could enable/disable some of those expansions + * as different software may use conflicting macros. + * + * + * can maybe have a look in sparse/lib.c to see a list of default #define + * handled builtin apparently by gcc. + */ + +// **************************************************************************** +// Hints +// **************************************************************************** + +/* Cooperation with parsing_hack.ml: some body of macros in this file, such + * as MACROSTATEMENT, are considered as magic strings. + * I can't just expand those macros into some 'whatever();' because I need + * to generate a TMacroStmt for solving some ambiguities in the grammar + * for the toplevel stuff I think. + * Right now a set of special strings are used as "hints" to the parser + * to help it parse code. Those hints are specified in parsing_hack.ml: + * + * - YACFE_ITERATOR + * - YACFE_DECLARATOR + * - YACFE_STRING + * - YACFE_STATEMENT, or MACROSTATEMENT + * - YACFE_ATTRIBUTE + * - YACFE_IDENT_BUILDER + */ + +// **************************************************************************** +// Test macros +// **************************************************************************** + +// #define FOO(a, OP, b) a OP b +// #define FOO(a,b) fn(a,b) +#define FOO_METH_TEST(a) YACFE_IDENT_BUILDER + +//#define FOO YACFE_DECLARATOR + +// **************************************************************************** +// Generic macros +// **************************************************************************** + +// **************************************************************************** +// Yacc macros +// **************************************************************************** + +#define YY_PROTO(x) x +#define yyconst const + + +// **************************************************************************** +// GNU Hello macros +// **************************************************************************** + +#define __getopt_argv_const const + + +// **************************************************************************** +// Gcc (as in the source of gcc code) macros +// **************************************************************************** + + +// **************************************************************************** +// Linux macros +// **************************************************************************** + +// ---------------------------------------------------------------------------- +// Attributes. could perhaps generalize via "__.*" +// ---------------------------------------------------------------------------- +#define __init +#define __exit +#define __user +#define __iomem +#define __initdata +#define __exitdata +#define __devinit +#define __devexit +#define __devinitdata +#define __cpuinit +#define __cpuinitdata +#define __init_or_module +#define __initdata_or_module +#define __pminit +#define __pminitdata + +#define __cacheline_aligned +#define ____cacheline_aligned +#define __cacheline_aligned_in_smp +#define ____cacheline_aligned_in_smp +#define ____cacheline_internodealigned_in_smp + +#define __ALIGNED__ +#define __3xp_aligned + +#define __pmac +#define __force +#define __nocast +#define __read_mostly + +#define __must_check +// pb +#define __unused +#define __maybe_unused + + +#define __attribute_used__ +#define __attribute_pure__ +#define __attribute_const__ +// #define _attribute__const __attribute__((const)) + +#define __always_inline + +#define __xipram + +// in the other part of the kernel, in arch/, mm/, etc +#define __sched +#define __initmv +#define __exception +#define __cpuexit +#define __kprobes +#define __meminit +#define __meminitdata +#define __nosavedata +#define __kernel +#define __nomods_init +#define __apicdebuginit +#define __ipc_init +#define __modinit +#define __lockfunc +#define __weak +#define __tlb_handler_align +#define __lock_aligned +#define __force_data +#define __nongprelbss +#define __nongpreldata +#define __noreturn + +#define __section_jiffies +#define __vsyscall_fn +#define __section_vgetcpu_mode +#define __section_vsyscall_gtod_data + +// in header files +#define __bitwise +#define __bitwise__ +#define __deprecated + + +// last found +#define __init_refok + + +// maybe only in old kernel +#define __openfirmware + + +#define __extension__ + +#define __thread +#define __used +#define __pure + +#define __ref +#define __refdata + +#define __uses_jump_to_uncached + + +// last last +#define __net_init +#define __net_exit +#define __net_initdata + +#define __paginginit // in mm + +// ---------------------------------------------------------------------------- +// String macros +// ---------------------------------------------------------------------------- + +/* string macro. normally handle quite well by mu lalr(k), but + * sometimes not enough, if have for instance the XX YY case, could + * be considered as a declaration with XX being a typedef, so would + * Have ambiguity. So at least by adding this special case, we can + * catch more correct string-macro, no more a XX YY but now a good + * "XX" YY + * + * cf include/linux/kernel.h + * + * For stringification I need to have at least a witness, a string, + * and sometimes have just printk(KERN_WARNING MYSTR) and it could + * be transformed in a typedef later, so better to at least + * transform in string already the string-macro we know. + * + * Perhaps better to apply also as soon as possible the + * correct macro-annotation tagging (__init & co) to be able to + * filter them as soon as possible so that they will not polluate + * our pattern-matching that come later. + */ + +#define KERN_EMERG "KERN_EMERG" +#define KERN_ALERT "KERN_ALERT" +#define KERN_CRIT "KERN_CRIT" +#define KERN_ERR "KERN_ERR" +#define KERN_WARNING "KERN_WARNING" +#define KERN_NOTICE "KERN_NOTICE" +#define KERN_INFO "KERN_INFO" +#define KERN_DEBUG "KERN_DEBUG" + + +/* EX_TABLE & co. + * + * Replaced by a string. We can't put everything as comment + * because it can be part of an expression where we wait for + * something, where we wait for a string. So at least we + * must keep the EX_TABLE token and transform it as a string. + * + * normally not needed if have good stringification of macro + * but those macros are sometimes used multiple times + * as in EX_TABLE(0b) EX_TABLE(1b) and we don't detect + * it well yet. + */ + +// TODO don't use x :( +#define EX_TABLE(x) "TOTO" +#define ASM_EXCEPTIONTABLE_ENTRY(x) "TOTO" +#define DCACHE_CLEAR(x) "TOTO" +#define PPC405_ERR77(x) "TOTO" + + + + +// ---------------------------------------------------------------------------- +// Alias keywords +// ---------------------------------------------------------------------------- +// pb, false positive, can also be a #define cst and use as 'case CONST:' +//#define CONST const + + +#define STATIC static +#define _static static + +#define noinline + +#define __CS4231_INLINE__ inline +#define CCIO_INLINE inline +#define SBA_INLINE inline + +#define STATIC_INLINE static inline +#define __EXTERN_INLINE extern inline + +#define AGPEXTERN extern + +#define PNMI_STATIC static +#define RLMT_STATIC static +#define SISINITSTATIC static +#define SCTP_STATIC static + +#define BUGLVL if +#define IFDEBUG if + +#define TRACE_EXIT return + +#define notrace + +#define noinline_for_stack // in fs +#define debug_noinline // in net + +// ---------------------------------------------------------------------------- +// linkage +// ---------------------------------------------------------------------------- + +#define fastcall +#define asmlinkage + +#define far +#define SK_FAR + +// pb +//#define near + + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- + +#define INITSECTION + +#define NORET_TYPE + +#define compat_init_data + +#define DIVA_EXIT_FUNCTION +#define DIVA_INIT_FUNCTION +#define ACPI_SYSTEM_XFACE + +#define ASC_INITDATA +#define in2000__INITDATA +#define PACKED + +#define WPMINFO +#define CPMINFO +#define PMINFO + +#define ACPI_INTERNAL_VAR_XFACE + +#define SISIOMEMTYPE + +#define ACPI_STATE_COMMON +#define ACPI_PARSE_COMMON +#define ACPI_COMMON_DEBUG_MEM_HEADER + + +#define nabi_no_regargs + + +#define ATTRIB_NORET +#define ATTRIBUTE_UNUSED +#define BTEXT +#define BTDATA +#define PAGE_ALIGNED + +#define EARLY_INIT_SECTION_ATTR + +// pb +//#define INIT + +#define IDI_CALL_ENTITY_T +#define IDI_CALL_LINK_T + +/* cf gcc-linux.h + * A trick to suppress uninitialized variable warning without generating any + * code + */ +#define uninitialized_var(x) x = x +// as in u16 uninitialized_var(ioboard_type); /* GCC be quiet */ + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- + +#define __releases(x) +#define __acquires(x) +#define __declspec(x) +#define __page_aligned(x) +#define __vsyscall(x) + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- + + +//conflict with a macro of firefox +//#define FASTCALL(x) x +#define PARAMS(x) x + + + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- + +// include/asm-arm/mach/arch.h +// #define MACHINE_START(x) struct foo { x } +#define MACHINE_START(_type,_name) \ +static const struct machine_desc __mach_desc_##_type \ +/* __used*/ \ + __attribute__((__section__(".arch.info.init"))) = { \ + .nr = MACH_TYPE_##_type, \ + .name = _name, + +#define MACHINE_END \ +}; + +// include/asm-powerpc/machdep.h +#define define_machine(name) \ + extern struct machdep_calls mach_##name; \ + EXPORT_SYMBOL(mach_##name); \ + struct machdep_calls mach_##name /*__machine_desc*/ = + + +// ---------------------------------------------------------------------------- +// Declare like macros (in structure def), or tricky Declare macros +// ---------------------------------------------------------------------------- + +// include/asm-i386/pci.h +// the DECLARE are detected by parsing_hack but not when they are +// inside a struct def. +#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) +#define DECLARE_PCI_UNMAP_LEN(LEN_NAME) + +// defined in drivers/infiniband/hw/mthca/mthca_doorbell.h +#define MTHCA_DECLARE_DOORBELL_LOCK(doorbell_lock) + +// include/linux/types.h +//#define BITS_TO_LONGS(bits) \ +// (((bits)+BITS_PER_LONG-1)/BITS_PER_LONG) +#define DECLARE_BITMAP(name,bits) \ + /*unsigned*/ long name[BITS_TO_LONGS(bits)] + + +// include/asm-i386/percpu.h +// interesting macro where we see the need of __typeof__(type) with +// for example DECLARE_PER_CPU(char[256], iucv_dbf_txt_buf); +#define DEFINE_PER_CPU(type, name) \ + __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name +#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name + + + +// include/linux/kobject.h +#define decl_subsys(_name,_type,_uevent_ops) \ +struct subsystem _name##_subsys = { \ + .kset = { \ + .kobj = { .name = __stringify(_name) }, \ + .ktype = _type, \ + .uevent_ops =_uevent_ops, \ + } \ +} + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- + +// pb: if use this macro then we will not transform the argument of CS_CHECK +// in some rules. +//#define CS_CHECK(fn, ret) \ +// do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) + + +// bt2/hci_bcsp.c +#define BCSP_CRC_INIT(x) x = 0xffff + + +// sound/oss/cs46xx_wrapper-24.h +#define CS_OWNER .owner = +#define CS_THIS_MODULE THIS_MODULE, + + +// sound/sparc/dbri.c +// "bad macro", have a ',' at the end +#define CS4215_SINGLE(xname, entry, shift, mask, invert) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ + .info = snd_cs4215_info_single, \ + .get = snd_cs4215_get_single, .put = snd_cs4215_put_single, \ + .private_value = entry | (shift << 8) | (mask << 16) | (invert << 24) }, + +// drivers/media/video/sn9c102/sn9c102_sensor.h +//#define sn9c102_write_const_regs(sn9c102_device, data...) \ +// ({ const static u8 _valreg[][2] = {data}; \ +// sn9c102_write_regs(sn9c102_device, _valreg, ARRAY_SIZE(_valreg)); }) + + + + + +// drivers/s390/cio/qdio.h +#define SYNC_MEMORY if (unlikely(q->siga_sync)) qdio_siga_sync_q(q) +#define SYNC_MEMORY_ALL if (unlikely(q->siga_sync)) \ + qdio_siga_sync(q,~0U,~0U) +#define SYNC_MEMORY_ALL_OUTB if (unlikely(q->siga_sync)) \ + qdio_siga_sync(q,~0U,0) + +// drivers/scsi/g_NCR5380.c +#define ANDP , + + +// drivers/scsi/ncr53c8xx.c +// generate lots of errors because error en cascade car dans l'initialiseur +// il y'a des '}' dans la premiere colonne +#define PREFETCH_FLUSH SCR_CALL, PADDRH (wait_dma), + +// drivers/net/e100.c +// pbs false positive, defined in another manner in some files +//#define X(a,b) a,b + + +// net/ipv4/netfilter/ip_conntrack_helper_h323_asn1.c +// also used in other.c that don't do any include :( +// but locally redefined in drivers/net/bnx2.c :( with a +// #define FNAME 0x8 +#define FNAME(name) name, + + +// drivers/net/tulip/de4x5.c +#define DESC_ALIGN + + +// in .h +#define MPI_POINTER * + +// mega4/soc.c mega4/socal.c +// cause false typedef inference if let soc_printk +#define soc_printk printk +#define socal_printk printk + + +// ---------------------------------------------------------------------------- +// Initializer array macros +// ---------------------------------------------------------------------------- + +// drivers/net/wireless/bcm43xx/bcm43xx_wx.c +// defined in similar way multiple times, in the same file and in another one +#define WX(ioctl) [(ioctl) - SIOCSIWCOMMIT] +// #define WX(x) [(x)-SIOCIWFIRST] + +// drivers/net/wireless/ipw2200.c +#define IW_IOCTL(x) [(x)-SIOCSIWCOMMIT] + +// drivers/net/wireless/zd1211rw/zd_netdev.c +#define PRIV_OFFSET(x) [(x)-SIOCIWFIRSTPRIV] + +// drivers/net/wireless/zd1211rw/zd_rf.h +#define RF_CHANNEL(ch) [(ch)-1] + +// drivers/net/wireless/zd1211rw/zd_rf_uw2453.c +#define RF_CHANPAIR(a,b) [CHAN_TO_PAIRIDX(a)] + +// drivers/net/wireless/arlan-proc.c +// incomplete macro, the real macro is quite complex and use other macros +#define ARLAN_SYSCTL_TABLE_TOTAL(x) + + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- + +// drivers/net/cxgb3/t3_hw.c +#define VPD_ENTRY(name, len) \ + u8 name##_kword[2]; u8 name##_len; u8 name##_data[len] + + +// #define rtrc(i) {} + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- + +// drivers/video/nvidia/nv_type.h +// use: SetBitField(h_blank_e, 5: 5, 7:7) +//#define BITMASK(t,b) (((unsigned)(1U << (((t)-(b)+1)))-1) << (b)) +//#define MASKEXPAND(mask) BITMASK(1?mask,0?mask) +//#define SetBF(mask,value) ((value) << (0?mask)) +//#define GetBF(var,mask) (((unsigned)((var) & MASKEXPAND(mask))) >> (0?mask) ) +//#define SetBitField(value,from,to) SetBF(to, GetBF(value,from)) +//#define SetBit(n) (1<<(n)) +//#define Set8Bits(value) ((value)&0xff) + + +// drivers/video/sis/init.c +// use: GETBITSTR((SiS_Pr->CVTotal -2), 10:10, 0:0) +//#define BITMASK(h,l) (((unsigned)(1U << ((h)-(l)+1))-1)<<(l)) +//#define GENMASK(mask) BITMASK(1?mask,0?mask) +//#define GETBITS(var,mask) (((var) & GENMASK(mask)) >> (0?mask)) +//#define GETBITSTR(val,from,to) ((GETBITS(val,from)) << (0?to)) + + +// fs/afs/internal.h +#define ASSERTCMP(X, OP, Y) \ +do { \ + if (unlikely(!((X) OP (Y)))) { \ + printk(KERN_ERR "\n"); \ + printk(KERN_ERR "AFS: Assertion failed\n"); \ + printk(KERN_ERR "%lu " /*#OP*/ " %lu is false\n", \ + (unsigned long)(X), (unsigned long)(Y)); \ + printk(KERN_ERR "0x%lx " /*#OP*/ " 0x%lx is false\n", \ + (unsigned long)(X), (unsigned long)(Y)); \ + BUG(); \ + } \ +} while(0) + +#define ASSERTIFCMP(C, X, OP, Y) \ +do { \ + if (unlikely((C) && !((X) OP (Y)))) { \ + printk(KERN_ERR "\n"); \ + printk(KERN_ERR "AFS: Assertion failed\n"); \ + printk(KERN_ERR "%lu " /*#OP*/ " %lu is false\n", \ + (unsigned long)(X), (unsigned long)(Y)); \ + printk(KERN_ERR "0x%lx " /*#OP*/ " 0x%lx is false\n", \ + (unsigned long)(X), (unsigned long)(Y)); \ + BUG(); \ + } \ +} while(0) + + +#define ASSERTRANGE(L, OP1, N, OP2, H) \ +do { \ + if (unlikely(!((L) OP1 (N)) || !((N) OP2 (H)))) { \ + printk(KERN_ERR "\n"); \ + printk(KERN_ERR "AFS: Assertion failed\n"); \ + printk(KERN_ERR "%lu "/*#OP1*/" %lu "/*#OP2*/" %lu is false\n", \ + (unsigned long)(L), (unsigned long)(N), \ + (unsigned long)(H)); \ + printk(KERN_ERR "0x%lx "/*#OP1*/" 0x%lx "/*#OP2*/" 0x%lx is false\n", \ + (unsigned long)(L), (unsigned long)(N), \ + (unsigned long)(H)); \ + BUG(); \ + } \ +} while(0) + + + + +// loop, macro without ';', single macro. ex: DEBUG() + +// TODO should find the definition because we don't use 'x' and so +// may lose code sites with coccinelle. If expand correctly, will +// still don't transform correctly but at least will detect the place. + + + + +#define ASSERT(x) MACROSTATEMENT +#define IRDA_ASSERT(x) MACROSTATEMENT + +#define CHECK_NULL(x) MACROSTATEMENT + +//#define DEBUG(x) MACROSTATEMENT +#define DEBUG0(x) MACROSTATEMENT +#define DEBUG1(x) MACROSTATEMENT +#define DEBUG2(x) MACROSTATEMENT +#define DEBUG3(x) MACROSTATEMENT + + +#define DBG(x) MACROSTATEMENT +#define DEB(x) MACROSTATEMENT +#define PARSEDEBUG(x) MACROSTATEMENT +#define DEBC(x) MACROSTATEMENT +#define DBG_TRC(x) MACROSTATEMENT +#define DBG_ERR(x) MACROSTATEMENT +#define DBG_FTL(x) MACROSTATEMENT + +#define DBGINFO(x) MACROSTATEMENT +#define DFLOW(x) MACROSTATEMENT +#define DFLIP(x) MACROSTATEMENT +#define DLOG_INT_TRIG(x) MACROSTATEMENT + +#define D3(x) MACROSTATEMENT +#define D1(x) MACROSTATEMENT +#define DB(x) MACROSTATEMENT +#define DCBDEBUG(x) MACROSTATEMENT +#define SCSI_LOG_MLQUEUE(x) MACROSTATEMENT + +#define PLND(x) MACROSTATEMENT +#define FCALND(x) MACROSTATEMENT +#define FCALD(x) MACROSTATEMENT + +#define DEBUGRECURSION(x) MACROSTATEMENT + +#define DEBUGPIO(x) MACROSTATEMENT +#define VDEB(x) MACROSTATEMENT + +#define READ_UNLOCK_IRQRESTORE(x) MACROSTATEMENT + +#define TRACE_CATCH(x) MACROSTATEMENT + +#define PDBGG(x) MACROSTATEMENT + +#define IF_ABR(x) MACROSTATEMENT +#define IF_EVENT(x) MACROSTATEMENT +#define IF_ERR(x) MACROSTATEMENT +#define IF_CBR(x) MACROSTATEMENT +#define IF_INIT(x) MACROSTATEMENT +#define IF_RX(x) MACROSTATEMENT + +#define SOD(x) MACROSTATEMENT + +#define KDBG(x) MACROSTATEMENT + +#define IRDA_ASSERT_LABEL(x) MACROSTATEMENT + + + + + +// ---------------------------------------------------------------------------- +// Difficult foreach +// ---------------------------------------------------------------------------- + +// include/linux/sched.h +#define while_each_thread(g, t) \ + while ((t = next_thread(t)) != g) + + + +// net/decnet/dn_fib.c +#define for_fib_info() { struct dn_fib_info *fi;\ + for(fi = dn_fib_info_list; fi; fi = fi->fib_next) +#define endfor_fib_info() } + +#define for_nexthops(fi) { int nhsel; const struct dn_fib_nh *nh;\ + for(nhsel = 0, nh = (fi)->fib_nh; nhsel < (fi)->fib_nhs; nh++, nhsel++) + +#define change_nexthops(fi) { int nhsel; struct dn_fib_nh *nh;\ + for(nhsel = 0, nh = (struct dn_fib_nh *)((fi)->fib_nh); nhsel < (fi)->fib_nhs; nh++, nhsel++) + +#define endfor_nexthops(fi) } + + +// ---------------------------------------------------------------------------- +// Macros around function prototype +// ---------------------------------------------------------------------------- + + +// net/sched/em_meta.c +#define META_COLLECTOR(FUNC) static void meta_##FUNC(struct sk_buff *skb, \ + struct tcf_pkt_info *info, struct meta_value *v, \ + struct meta_obj *dst, int *err) + + +#define GDTH_INITFUNC(x,y) x y +#define ASC_INITFUNC(x,y) x y + + +// ---------------------------------------------------------------------------- +// If-like macros +// ---------------------------------------------------------------------------- + +// include/linux/lockd/debug.h +// include/linux/nfs_fs.h +// include/linux/nfsd/debug.h +// include/linux/sunrpc/debug.h +//#define ifdebug(flag) if (unlikely(nlm_debug & NLMDBG_##flag)) +#define ifdebug(flag) if (0) + + + +// ---------------------------------------------------------------------------- +//#define __PROM_O32 + +// ---------------------------------------------------------------------------- +// for tests-big/ macros, may be obsolete now cos fixed in latest kernel +// ---------------------------------------------------------------------------- + +// rule10 +//#define ACPI_MODULE_NAME(x) + + + + +// **************************************************************************** +// Httpd (apache) macros +// **************************************************************************** + +#define AP_DECLARE(x) x +#define PROXY_DECLARE(x) x +#define CACHE_DECLARE(x) x +#define DBD_DECLARE_NONSTD(x) x +#define DAV_DECLARE(x) x +#define APU_DECLARE(x) x +#define APU_DECLARE_NONSTD(x) x +#define APR_DECLARE(x) x +#define AP_CORE_DECLARE(x) x +#define AP_DECLARE_NONSTD(x) x +#define AP_CORE_DECLARE_NONSTD(x) x +#define APR_OPTIONAL_FN_TYPE(x) x +#define DAV_DECLARE_NONSTD(x) x +#define APR_DECLARE_NONSTD(x) x + +#define APU_DECLARE_DATA +#define APR_THREAD_FUNC +#define AP_DECLARE_DATA +#define PROXY_DECLARE_DATA +#define AP_MODULE_DECLARE_DATA +#define APR_DECLARE_DATA + + + +#define APR_INLINE inline +#define EXPORT static +#define REGISTER register + +#define MODSSL_D2I_SSL_SESSION_CONST const +#define MODSSL_D2I_X509_CONST const +#define MODSSL_D2I_PrivateKey_CONST const +#define MODSSL_D2I_SSL_SESSION_CONST const + +#define STACK_OF(X509_NAME) X509_NAME + +#define MODSSL_PCHAR_CAST (pchar) + +#define WINAPI +//#define CALLBACK +// generate false positive in Linux +#define APIENTRY +#define __declspec(x) +#define __stdcall + + +//#define module struct xxx + +#define APR_POOL_IMPLEMENT_ACCESSOR(shm) + +#define ADD_SUITE(suite) suite; + +// **************************************************************************** +// CISCO vpn client macros +// **************************************************************************** + +// #define NOREGPARM +// #define IN +// #define OUT +// #define OPTIONAL + +#define likely(x) (x) +#define unlikely(x) (x) diff --git a/scripts/coccicheck/cocci/notnull.cocci b/scripts/coccicheck/cocci/notnull.cocci new file mode 100644 index 0000000..11ae051 --- /dev/null +++ b/scripts/coccicheck/cocci/notnull.cocci @@ -0,0 +1,86 @@ +// This detects NULL tests that can only be reached when the value is known +// not to be NULL +// +// Confidence: High +// Copyright: (C) Gilles Muller, Julia Lawall, EMN, DIKU. GPLv2. +// URL: http://www.emn.fr/x-info/coccinelle/rules/notnull.html +// Options: + +virtual org,diff + +@r exists@ +local idexpression x; +expression E; +position p1,p2; +@@ + +if (x@p1 == NULL || ...) { ... when forall + return ...; } +... when != \(x=E\|x--\|x++\|--x\|++x\|x-=E\|x+=E\|x|=E\|x&=E\) + when != &x +( +x@p2 == NULL +| +x@p2 != NULL +) + +// another path to the test that is not through p1? + +@s exists@ +local idexpression r.x; +position r.p1,r.p2; +@@ + +... when != x@p1 +( +x@p2 == NULL +| +x@p2 != NULL +) + +// another path to the test from p1? + +@t exists@ +local idexpression x; +position r.p1,r.p2; +@@ + +if (x@p1 == NULL || ...) { ... x@p2 ... when any + return ...; } + +// another path to the test containing an assignment? + +@u exists@ +local idexpression x; +expression E; +position r.p1,r.p2; +@@ + +if (x@p1 == NULL || ...) { ... when forall + return ...; } + ... + \(x=E\|x--\|x++\|--x\|++x\|x-=E\|x+=E\|x|=E\|x&=E\|&x\) + ... when != x@p1 + when any +( +x@p2 == NULL +| +x@p2 != NULL +) + +@script:python depends on !s && !t && !u && org @ +p1 << r.p1; +p2 << r.p2; +@@ + +cocci.print_main("",p2) +cocci.print_secs("",p1) + +@depends on !s && !t && !u && diff@ +position r.p1, r.p2; +expression x; +@@ + +*x@p1 +... +*x@p2 diff --git a/scripts/coccicheck/cocci/null_ref.cocci b/scripts/coccicheck/cocci/null_ref.cocci new file mode 100644 index 0000000..e4f9811 --- /dev/null +++ b/scripts/coccicheck/cocci/null_ref.cocci @@ -0,0 +1,79 @@ +// Find cases where a pointer is dereferenced and then compared to NULL +// +// Confidence: High +// Copyright: (C) Gilles Muller, Julia Lawall, EMN, DIKU. GPLv2. +// URL: http://www.emn.fr/x-info/coccinelle/rules/null_ref.html +// Options: + +virtual org,diff + +@match exists@ +expression x, E,E1; +identifier fld; +position p1,p2; +@@ + +( +x = E; +... when != \(x = E1\|&x\) +x@p2 == NULL +... when any +| +x = E +... when != \(x = E1\|&x\) +x@p2 == NULL +... when any +| +x != NULL && (<+...x->fld...+>) +| +x == NULL || (<+...x->fld...+>) +| +x != NULL ? (<+...x->fld...+>) : E +| +&x->fld +| +x@p1->fld +... when != \(x = E\|&x\) +x@p2 == NULL +... when any +) + +@other_match exists@ +expression match.x, E1, E2; +position match.p1,match.p2; +@@ + +( +x = E1 +| +&x +) +... when != \(x = E2\|&x\) + when != x@p1 +x@p2 + +@other_match1 exists@ +expression match.x, E2; +position match.p1,match.p2; +@@ + +... when != \(x = E2\|&x\) + when != x@p1 +x@p2 + +@ script:python depends on !other_match && !other_match1 && org@ +p1 << match.p1; +p2 << match.p2; +@@ + +cocci.print_main(p1) +cocci.print_secs("NULL test",p2) + +@depends on !other_match && !other_match1 && diff@ +position match.p1, match.p2; +expression x; +@@ + +*x@p1 +... +*x@p2 diff --git a/scripts/coccicheck/cocci/open.cocci b/scripts/coccicheck/cocci/open.cocci new file mode 100644 index 0000000..6effc2f --- /dev/null +++ b/scripts/coccicheck/cocci/open.cocci @@ -0,0 +1,77 @@ +// +// open.cocci (based on kmalloc 7) +// +// + +virtual diff,org + +@r exists@ +local idexpression x; +statement S; +expression E; +identifier f,l; +position p1,p2,p3; +expression *ptr != NULL; +@@ + +( +if ((x@p1 = \(open\|fopen\)(...)) == NULL) S +| +x@p1 = \(open\|fopen\)(...); +... +if (x == NULL) S +) +<... when != x + when != if (...) { <+...x...+> } +( +goto@p3 l; +| +x->f = E +) +...> +( + return \(0\|<+...x...+>\|ptr\); +| + return@p2 ...; +) + +@script:python depends on org@ +p1 << r.p1; +p2 << r.p2; +p3 << r.p3; +@@ + +cocci.print_main("",p1) +cocci.print_secs("", p2) +cocci.print_secs("goto", p3) +cocci.include_match(False) + +@script:python depends on org@ +p1 << r.p1; +p2 << r.p2; +@@ + +cocci.print_main("",p1) +cocci.print_secs("", p2) + +@with_goto depends on diff@ +expression x; +identifier l; +position r.p1, r.p2, r.p3; +@@ + +*x@p1 +... +*goto@p3 l; +... +*return@p2 ...; + +@depends on diff && !with_goto@ +expression x; +position r.p1, r.p2; +@@ + +*x@p1 +... +*return@p2 ...; + diff --git a/scripts/coccicheck/cocci/unused.cocci b/scripts/coccicheck/cocci/unused.cocci new file mode 100644 index 0000000..e5b69f6 --- /dev/null +++ b/scripts/coccicheck/cocci/unused.cocci @@ -0,0 +1,46 @@ +// A variable is only initialized to a constant and is never used otherwise +// +// Confidence: High +// Copyright: (C) Gilles Muller, Julia Lawall, EMN, DIKU. GPLv2. +// URL: http://www.emn.fr/x-info/coccinelle/rules/unused.html +// Options: + +virtual org,diff + +@e@ +identifier i; +position p; +type T; +@@ + +extern T i@p; + +@v forall@ +type T; +identifier i; +constant C; +position p1 != e.p; +position p2; +@@ + +T i@p1; + <+... when != i +i@p2 = C; + ...+> + +@script:python depends on org@ +p1 << v.p1; +p2 << v.p2; +@@ + +cocci.print_main("",p1) +cocci.print_secs("",p2) + +@depends on diff exists@ +identifier i; +position v.p1, v.p2; +@@ + +*i@p1 +... +*i@p2 diff --git a/scripts/coccicheck/configure b/scripts/coccicheck/configure new file mode 100755 index 0000000..9cd9ce6 --- /dev/null +++ b/scripts/coccicheck/configure @@ -0,0 +1,27 @@ +#!/bin/bash + +MODE=$1 +PROJECT=$2 + +if [ "$MODE" == "" -o "$PROJECT" == "" ]; then + echo -e "\n\tUsage: $0 mode path\n" + echo -e "\tmode\torg or diff according to your needs" + echo -e "\tpath\tyour project path\n" + exit 1 +fi + +echo "Using PREFIX="${PREFIX:=`pwd`} +echo "Using PROJECT="${PROJECT:=$PREFIX/project} +echo "Using COCCI="${COCCI:=$PREFIX/cocci} +echo "Using RESULTS="${RESULTS:=$PREFIX/results} +echo "Using SPFLAGS="${SPFLAGS:="-timeout 60 -use_glimpse -D $MODE"} + +echo -e "\nFor efficiency, run \`/scripts/glimpseindex_cocci.sh\`" +echo -e "in $PROJECT\n" + +sed -i "s|^PREFIX?=.*$|PREFIX?=${PREFIX}|" Makefile +sed -i "s|^PROJECT?=.*$|PROJECT?=${PROJECT}|" Makefile +sed -i "s|^COCCI?=.*$|COCCI?=${COCCI}|" Makefile +sed -i "s|^RESULTS?=.*$|RESULTS?=${RESULTS}|" Makefile +sed -i "s|^SPFLAGS?=.*$|SPFLAGS?=\"${SPFLAGS}\"|" Makefile + diff --git a/scripts/extract_c_and_res.pl b/scripts/extract_c_and_res.pl index 4ef3f64..3be6213 100755 --- a/scripts/extract_c_and_res.pl +++ b/scripts/extract_c_and_res.pl @@ -1,3 +1,23 @@ +# Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +# This file is part of Coccinelle. +# +# Coccinelle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, according to version 2 of the License. +# +# Coccinelle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Coccinelle. If not, see . +# +# The authors reserve the right to distribute this or future versions of +# Coccinelle under other licenses. + + #!/usr/bin/perl -w use strict; diff --git a/scripts/extract_examples.pl b/scripts/extract_examples.pl index f0fed0a..23a5465 100755 --- a/scripts/extract_examples.pl +++ b/scripts/extract_examples.pl @@ -1,3 +1,23 @@ +# Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +# This file is part of Coccinelle. +# +# Coccinelle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, according to version 2 of the License. +# +# Coccinelle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Coccinelle. If not, see . +# +# The authors reserve the right to distribute this or future versions of +# Coccinelle under other licenses. + + #!/usr/bin/perl #usage: ./extract_examples.pl ~/week-end/working-documents/examples.tex diff --git a/scripts/extractor_README.pl b/scripts/extractor_README.pl index 2339422..6d14986 100755 --- a/scripts/extractor_README.pl +++ b/scripts/extractor_README.pl @@ -1,3 +1,23 @@ +# Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +# This file is part of Coccinelle. +# +# Coccinelle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, according to version 2 of the License. +# +# Coccinelle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Coccinelle. If not, see . +# +# The authors reserve the right to distribute this or future versions of +# Coccinelle under other licenses. + + #!/usr/bin/perl use strict; diff --git a/scripts/gather_failed.pl b/scripts/gather_failed.pl index 11f32b1..b078b01 100755 --- a/scripts/gather_failed.pl +++ b/scripts/gather_failed.pl @@ -1,3 +1,23 @@ +# Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +# This file is part of Coccinelle. +# +# Coccinelle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, according to version 2 of the License. +# +# Coccinelle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Coccinelle. If not, see . +# +# The authors reserve the right to distribute this or future versions of +# Coccinelle under other licenses. + + #!/usr/bin/perl # usage: gather_failed.pl **/*.failed > /tmp/big.failed diff --git a/scripts/readme.pl b/scripts/readme.pl index 84b7091..0c33a07 100755 --- a/scripts/readme.pl +++ b/scripts/readme.pl @@ -1,3 +1,23 @@ +# Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +# This file is part of Coccinelle. +# +# Coccinelle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, according to version 2 of the License. +# +# Coccinelle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Coccinelle. If not, see . +# +# The authors reserve the right to distribute this or future versions of +# Coccinelle under other licenses. + + #!/usr/bin/perl # # ARGV: 0 = replacement text, 1 = file w. list of files diff --git a/scripts/stat_directories.pl b/scripts/stat_directories.pl index 10821a7..c05f9b5 100755 --- a/scripts/stat_directories.pl +++ b/scripts/stat_directories.pl @@ -1,3 +1,23 @@ +# Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +# This file is part of Coccinelle. +# +# Coccinelle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, according to version 2 of the License. +# +# Coccinelle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Coccinelle. If not, see . +# +# The authors reserve the right to distribute this or future versions of +# Coccinelle under other licenses. + + #!/usr/bin/perl #usage: diff --git a/scripts/stat_directories_complete.pl b/scripts/stat_directories_complete.pl index 58578ea..bfd7faa 100755 --- a/scripts/stat_directories_complete.pl +++ b/scripts/stat_directories_complete.pl @@ -1,3 +1,23 @@ +# Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +# This file is part of Coccinelle. +# +# Coccinelle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, according to version 2 of the License. +# +# Coccinelle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Coccinelle. If not, see . +# +# The authors reserve the right to distribute this or future versions of +# Coccinelle under other licenses. + + #!/usr/bin/perl #usage: diff --git a/scripts/stat_directory_complete.pl b/scripts/stat_directory_complete.pl index a7d35d2..3be7088 100755 --- a/scripts/stat_directory_complete.pl +++ b/scripts/stat_directory_complete.pl @@ -1,3 +1,23 @@ +# Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +# This file is part of Coccinelle. +# +# Coccinelle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, according to version 2 of the License. +# +# Coccinelle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Coccinelle. If not, see . +# +# The authors reserve the right to distribute this or future versions of +# Coccinelle under other licenses. + + #!/usr/bin/perl use strict; diff --git a/standard.h b/standard.h index 94a9192..309bfeb 100644 --- a/standard.h +++ b/standard.h @@ -749,5 +749,3 @@ do { \ // rule10 //#define ACPI_MODULE_NAME(x) - - diff --git a/test.ml b/test.ml dissimilarity index 93% index d3ea730..eef8949 100644 --- a/test.ml +++ b/test.ml @@ -1,23 +1,199 @@ -(* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) - - -let foo_ctl () = failwith "there is no foo_ctl formula" +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +let foo_ctl () = failwith "there is no foo_ctl formula" diff --git a/testing.ml b/testing.ml index 6ca4be7..f0f1113 100644 --- a/testing.ml +++ b/testing.ml @@ -1,23 +1,23 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* This file is part of Coccinelle. -* -* Coccinelle is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, according to version 2 of the License. -* -* Coccinelle is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Coccinelle. If not, see . -* -* The authors reserve the right to distribute this or future versions of -* Coccinelle under other licenses. -*) + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) open Common @@ -454,19 +454,18 @@ let test_parse_cocci file = if not (file =~ ".*\\.cocci") then pr2 "warning: seems not a .cocci file"; - let (_,xs,_,_,_,_,grep_tokens,query) = + let (_,xs,_,_,_,_,grep_tokens,query,_) = Parse_cocci.process file (Some !Config.std_iso) false in xs +> List.iter Pretty_print_cocci.unparse; Printf.printf "grep tokens\n"; List.iter (function x -> Printf.printf "%s\n" (String.concat " " x)) grep_tokens; - if !Flag.use_glimpse - then match query with None -> pr "No query" | Some x -> pr x - - - - - + match !Flag.scanner with + Flag.NoScanner -> () + | Flag.Glimpse | Flag.Google _ -> + (match query with + None -> pr "No query" + | Some x -> pr (String.concat " || " x)) diff --git a/testing.mli b/testing.mli index aff5cc2..558e2f1 100644 --- a/testing.mli +++ b/testing.mli @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + open Common (*****************************************************************************) @@ -47,7 +69,8 @@ val sp_of_file : Ast_cocci.meta_name list list list) * Ast_cocci.meta_name list list list * string list list * - string option + string list option * + (string * bool) list (* TODO: Remove val rule_elem_of_string : string -> filename option -> Ast_cocci.rule_elem diff --git a/tests/SCORE_expected.sexp b/tests/SCORE_expected.sexp deleted file mode 100644 index 8578fa8..0000000 --- a/tests/SCORE_expected.sexp +++ /dev/null @@ -1,159 +0,0 @@ -((a.res Ok) (a3d.res Ok) (a_and_e.res Ok) (a_and_e_ver1.res Ok) (ab.res Ok) - (addelse.res Ok) (addif.res Ok) (addif1.res Ok) (addif2.res Ok) - (after_if.res Ok) (anon.res Ok) (ar.res Ok) (arg.res Ok) (argument.res Ok) - (array_init.res Ok) (array_size.res Ok) (arraysz.res Ok) (b1.res Ok) - (b2.res Ok) - (bad_iso_example.res - (Pb - "INCORRECT:diff token: ( VS x\nFile \"tests/bad_iso_example.c\", line 2, column 6, charpos = 19\n around = '(', whole content = if ((x = 3)) return;\nFile \"tests/bad_iso_example.res\", line 2, column 6, charpos = 19\n around = 'x', whole content = if (x) return;\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,4 +1,4 @@\n int main() {\n - if ((x = 3)) return;\n + if (x) return;\n }\n \n")) - (bad_ptr_print.res Ok) (bad_typedef.res Ok) (badexp.res Ok) - (badpos.res - (Pb - "PROBLEM\n exn = Failure(\"rule starting on line 1: already tagged token:\\nC code context\\nFile \\\"tests/badpos.c\\\", line 5, column 30, charpos = 139\\n around = 'reg_ptr', whole content = \\t (int) -(((struct pt_regs *) reg_ptr)->orig_eax + 2));\")\n")) - (badtypedef.res Ok) (badzero.res Ok) (ben.res Ok) (bitfield.res Ok) - (braces.res Ok) (break.res Ok) (bug1.res Ok) - (bugloop.res - (Pb - "INCORRECT:diff token: PF_FREEZE VS )\nFile , line 12, column 16, charpos = 390\n around = 'PF_FREEZE', whole content = \t\t\trefrigerator(PF_FREEZE);\nFile \"tests/bugloop.res\", line 8, column 16, charpos = 160\n around = ')', whole content = \t\t\trefrigerator();\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,7 +1,3 @@\n -/* this doesn't work, because on the paths where we don't find refrigerator,\n -we expect to reach Exit without first going through current->flags & PF_FREEZE,\n -but of course any path that goes around the loop does precisely that */\n -\n static int stir_transmit_thread(void *arg)\n {\n \n @@ -9,7 +5,7 @@\n \t{\n \t\t/* if suspending, then power off and wait */\n \t\tif (unlikely(freezing(current))) {\n -\t\t\trefrigerator(PF_FREEZE);\n +\t\t\trefrigerator();\n \n \t\t}\n \t}\n")) - (bugon.res Ok) (cards.res Ok) (cast.res Ok) (cast_iso.res Ok) (com.res Ok) - (compare.res Ok) (const.res Ok) (const1bis.res Ok) (const_adding.res Ok) - (const_array.res Ok) (const_implicit_iso.res Ok) (constty.res Ok) - (constx.res Ok) (cs_check.res Ok) (cst.res Ok) (csw.res Ok) - (dbg.res - (Pb - "INCORRECT:diff token: else VS (\nFile , line 8, column 2, charpos = 133\n around = 'else', whole content = \t\telse pr = NULL;(\"PCI\");\nFile \"tests/dbg.res\", line 7, column 5, charpos = 130\n around = '(', whole content = \t\tDBG(\"PCI\");\n\n diff (result(<) vs expected_result(>)) = \n @@ -4,6 +4,6 @@\n \tstruct resource *pr, *r = &dev->resource[idx];\n \n \tif (pr)\n -\t\tDBG\n -\t\telse pr = NULL;(\"PCI\");\n +\t\tDBG(\"PCI\");\n +\telse pr = NULL;\n }\n")) - (dbg1.res - (Pb - "INCORRECT:diff token: E VS (\nFile , line 5, column 2, charpos = 75\n around = 'E', whole content = \t\tE = NULL;(\"PCI\");\nFile \"tests/dbg1.res\", line 4, column 5, charpos = 72\n around = '(', whole content = \t\tDBG(\"PCI\");\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,6 +1,6 @@\n \n static inline void alloc_resource(struct pci_dev *dev, int idx)\n {\n -\t\tDBG\n -\t\tE = NULL;(\"PCI\");\n +\t\tDBG(\"PCI\");\n +\t\tE = NULL;\n }\n")) - (dc_close.res Ok) (debug.res Ok) (dec.res Ok) (decl.res Ok) (decl2.res Ok) - (decl_space.res Ok) - (decl_split.res - (Pb - "INCORRECT:diff token: int VS }\nFile \"tests/decl_split.c\", line 2, column 8, charpos = 27\n around = 'int', whole content = int x, y;\nFile \"tests/decl_split.res\", line 2, column 0, charpos = 19\n around = '}', whole content = }\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,3 +1,2 @@\n int func(int i) { \n - int x, y;\n }\n")) - (define_exp.res Ok) (define_param.res Ok) (deftodo.res Ok) - (delete_function.res Ok) (deref.res Ok) (devlink.res Ok) (disjexpr.res Ok) - (disjexpr_ver1.res Ok) (disjexpr_ver2.res Ok) (distribute.res Ok) - (double.res Ok) (double_assign.res Ok) (double_switch.res Ok) - (doublepos.res Ok) (doubleswitch.res Ok) (dowhile.res Ok) (dropf.res Ok) - (dropparam.res Ok) (edots.res Ok) (edots_ver1.res Ok) (empty.res Ok) - (end_commas.res Ok) (endif.res Ok) (enum.res Ok) (exp.res Ok) - (expnest.res Ok) (expopt.res Ok) (expopt2.res Ok) (expopt3.res Ok) - (expopt3_ver1.res Ok) (expopt3_ver2.res Ok) (fields.res Ok) - (fieldsmin.res Ok) (find_long.res Ok) (fix_flow_need.res Ok) - (fn_todo.res Ok) (fnptr.res Ok) (fnret.res Ok) (four.res Ok) (foura.res Ok) - (fp.res Ok) (fsh.res Ok) (fun.res Ok) (gilles-question.res Ok) - (gotobreak.res Ok) (hd.res Ok) (headers.res Ok) (hex.res Ok) (hil1.res Ok) - (if.res Ok) (ifbr.res Ok) (ifdef1.res Ok) (ifdef2.res Ok) - (ifdef3.res - (Pb - "PROBLEM\n exn = Lexer_cocci.Lexical(\"unrecognised symbol, in token rule: #\")\n")) - (ifdef4.res Ok) (ifdef5.res Ok) (ifdef6.res Ok) (ifdef6a.res Ok) - (ifdefmeta.res Ok) (ifdefmeta1.res Ok) (ifdefmeta2.res Ok) - (ifdefmeta3.res Ok) - (ifdefmeta4.res - (Pb - "PROBLEM\n exn = Unix.Unix_error(20, \"stat\", \"tests/ifdefmeta4.cocci\")\n")) - (ifend.res Ok) (ifzer.res Ok) (inc.res Ok) - (incdir.res - (Pb - "INCORRECT:diff token: x VS 12\nFile \"tests/incdir.c\", line 4, column 6, charpos = 46\n around = 'x', whole content = foo(x);\nFile \"tests/incdir.res\", line 4, column 6, charpos = 46\n around = '12', whole content = foo(12);\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,5 +1,5 @@\n #include \"sub/incdir2.c\"\n \n int main () {\n - foo(x);\n + foo(12);\n }\n")) - (incl.res Ok) (inclifdef.res Ok) (include.res Ok) - (incompatible_value.res Ok) (inherited.res Ok) (inherited_ver1.res Ok) - (inhpos.res Ok) (initializer.res Ok) (initializer_many_fields.res Ok) - (inline.res Ok) (isococci.res Ok) (isotest.res Ok) (isotest2.res Ok) - (iterator.res Ok) - (jloop1.res - (Pb - "PROBLEM\n exn = Failure(\"minus: parse error: \\n = File \\\"tests/jloop1.cocci\\\", line 10, column 3, charpos = 129\\n around = '...>', whole content = ...>\\n\")\n")) - (julia10.res Ok) (julia7.res Ok) (keep_comma.res Ok) (km.res Ok) - (kmalloc.res Ok) (kmc.res Ok) (ktype.res Ok) - (labels_metastatement.res - (Pb - "INCORRECT:diff token: { VS x\nFile , line 4, column 2, charpos = 30\n around = '{', whole content = {\nFile \"tests/labels_metastatement.res\", line 4, column 4, charpos = 32\n around = 'x', whole content = x = 3; foo();\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,15 +1,10 @@\n int foo(int i) {\n \n if(1) {\n - {\n - x = 3;\n - foo();\n - z = 4;\n - foo();\n - }\n - foo();\n - }\n - foo(); // we dont want that it add both foo on the } and on the endif\n + x = 3; foo();\n + z = 4; foo();\n + } // we dont want that it add both foo on the } and on the endif\n // (note: but need correct endif accrochage)\n + foo();\n \n }\n")) - (labels_metastatement_ver1.res Ok) (line_before_last.res Ok) (local.res Ok) - (localid.res Ok) (longconst.res Ok) (longlong.res Ok) (longlongint.res Ok) - (loop.res Ok) (lvalue.res Ok) (macro.res Ok) (macro_int16.res Ok) - (match_no_meta.res Ok) (max.res Ok) - (memory.res (Pb "PROBLEM\n exn = Out of memory\n")) - (metahex.res - (Pb - "INCORRECT:diff token: f VS }\nFile \"tests/metahex.c\", line 2, column 2, charpos = 15\n around = 'f', whole content = f(3);\nFile \"tests/metahex.res\", line 2, column 0, charpos = 13\n around = '}', whole content = }\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,4 +1,2 @@\n int main() {\n - f(3);\n - g(0x03);\n }\n")) - (metaruleelem.res Ok) (metastatement2.res Ok) (metastatement_for.res Ok) - (metastatement_if.res Ok) - (mini_null_ref.res - (Pb - "INCORRECT:diff token: if VS struct\nFile , line 6, column 8, charpos = 269\n around = 'if', whole content = if (!pdata) {\nFile \"tests/mini_null_ref.res\", line 6, column 8, charpos = 269\n around = 'struct', whole content = struct w90p910_keypad *keypad;\n\n diff (result(<) vs expected_result(>)) = \n @@ -3,6 +3,8 @@\n const struct w90p910_keypad_platform_data *pdata =\n pdev->dev.platform_data;\n const struct matrix_keymap_data * keymap_data;\n + struct w90p910_keypad *keypad;\n +\n if (!pdata) {\n dev_err(&pdev->dev, \"no platform data defined\\n\");\n return -EINVAL;\n")) - (minstruct.res Ok) (minusdots.res Ok) (minusdots_ver1.res Ok) - (multi_func1.res - (Pb - "PROBLEM\n exn = Failure(\"minus: parse error: \\n = File \\\"tests/multi_func1.cocci\\\", line 12, column 2, charpos = 102\\n around = 'fn2', whole content = fn2(...) {\\n\")\n")) - (multiplus.res Ok) (multitype.res Ok) (multitypedef.res Ok) - (multivars.res Ok) (nest.res Ok) (nestone.res Ok) (nestseq.res Ok) - (neststruct.res Ok) (nl.res Ok) (nocast.res Ok) (not.res Ok) (notest.res Ok) - (noty.res Ok) (null_type.res Ok) - (oddifdef.res - (Pb - "INCORRECT:diff token: #else\n VS x\nFile , line 10, column 0, charpos = 114\n around = '#else\n', whole content = #else\nFile \"tests/oddifdef.res\", line 10, column 2, charpos = 116\n around = 'x', whole content = x = 0;\n\n diff (result(<) vs expected_result(>)) = \n @@ -7,8 +7,9 @@\n a = 5;\n \n #ifdef FOO\n + x = 0;\n #else\n - \n + x = 0;\n #endif\n }\n \n @@ -21,8 +22,9 @@\n a = 3;\n \n #ifdef FOO\n + x = 0;\n #else\n - \n + x = 0;\n #endif\n }\n \n @@ -35,7 +37,8 @@\n #endif\n \n #ifdef FOO\n + x = 0;\n #else\n - \n + x = 0;\n #endif\n }\n")) - (of.res Ok) (oneline.res Ok) (opt.res Ok) (optional_qualifier.res Ok) - (optional_storage.res Ok) (orexp.res Ok) (overshoot.res Ok) (param.res Ok) - (param_end.res Ok) (param_ver1.res Ok) (parameters_dots.res Ok) - (partial.res Ok) - (pb_distribute_type.res - (Pb - "INCORRECT:PB parsing only in generated-file\n diff (result(<) vs expected_result(>)) = \n @@ -5,11 +5,11 @@\n \n \n int foo() {\n - int * *x;\n + int **x;\n return 0;\n }\n \n int foo() {\n - int[45] *x;\n + int (*x)[45];\n return 0;\n }\n")) - (pb_distribute_type2.res - (Pb - "INCORRECT:PB parsing only in generated-file\n diff (result(<) vs expected_result(>)) = \n @@ -1,5 +1,5 @@\n int foo() {\n - int* x;\n + int *x;\n return 0;\n }\n \n @@ -10,6 +10,6 @@\n }\n \n int foo() {\n - int x[45]*;\n + int (*x)[45];\n return 0;\n }\n")) - (pb_distribute_type3.res - (Pb "PROBLEM\n exn = Failure(\"line 7: index 53 53 already used\\n\")\n")) - (pb_distribute_type4.res Ok) (pb_params_iso.res Ok) - (pb_parsing_macro.res Ok) (pb_tag_symbols.res Ok) (pmac.res Ok) - (posiso.res Ok) (positionc.res Ok) (post.res Ok) (print_return.res Ok) - (proto.res Ok) (proto2.res Ok) (proto_ver1.res Ok) (proto_ver2.res Ok) - (protoassert.res Ok) (protox.res Ok) (rcu3.res Ok) - (remstruct.res - (Pb - "INCORRECT:not same number of entities (func, decl, ...)\n diff (result(<) vs expected_result(>)) = \n @@ -1,10 +1,3 @@\n -\n - .ack = mpuio_ack_irq,\n - .mask = mpuio_mask_irq,\n - .unmask = mpuio_unmask_irq\n -\n - .b = 15,\n -\n int hello ( String input )\n {\n String input = input.lowercase();\n")) - (replace_typedef.res Ok) (reserved.res Ok) (retmacro.res Ok) (rets.res Ok) - (return.res Ok) (return_implicit.res Ok) (retval.res Ok) (same_expr.res Ok) - (scope_problem.res - (Pb - "INCORRECT:diff token: } VS a\nFile , line 5, column 2, charpos = 43\n around = '}', whole content = }\nFile \"tests/scope_problem.res\", line 7, column 4, charpos = 49\n around = 'a', whole content = a = 2;\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,7 +1,10 @@\n void main(int i) {\n \n + \n +\n if(1) {\n int a;\n + a = 2;\n }\n \n \n")) - (serio.res - (Pb - "INCORRECT:diff token: init_MUTEX VS mutex_init\nFile \"tests/serio.c\", line 7, column 1, charpos = 130\n around = 'init_MUTEX', whole content = \tinit_MUTEX(&serio->drv_sem);\nFile \"tests/serio.res\", line 7, column 1, charpos = 130\n around = 'mutex_init', whole content = \tmutex_init(&serio->new_lock);\n\n diff (result(<) vs expected_result(>)) = \n @@ -4,5 +4,5 @@\n \n static void serio_init_port(struct serio *serio)\n {\n -\tinit_MUTEX(&serio->drv_sem);\n +\tmutex_init(&serio->new_lock);\n }\n")) - (shared_brace.res Ok) (signed.res Ok) (sis.res Ok) (sizeof.res Ok) - (sizeof_julia.res Ok) (skip.res Ok) (sp.res Ok) (spaces.res Ok) (spl.res Ok) - (static.res (Pb "PROBLEM\n exn = Common.Impossible\n")) (stm1.res Ok) - (stm10.res Ok) (stm10_ver1.res Ok) (stm2.res Ok) (stm3.res Ok) (stm4.res Ok) - (stm5.res Ok) (stm6.res Ok) (stm7.res Ok) (stm8.res Ok) (stmt.res Ok) - (strangeorder.res Ok) (string.res Ok) (struct.res Ok) - (struct_metavar.res Ok) (struct_typedef.res Ok) (structfoo.res Ok) - (substruct.res Ok) (sw.res Ok) (switch.res Ok) (switchdecl.res Ok) - (td.res Ok) (test0.res Ok) (test1.res Ok) (test10.res Ok) - (test10_ver1.res Ok) (test11.res Ok) (test11_ver1.res Ok) (test12.res Ok) - (test2.res Ok) (test3.res Ok) (test4.res Ok) (test5.res Ok) - (test5_ver1.res Ok) (test6.res Ok) (test7.res Ok) (test8.res Ok) - (test9.res Ok) (test_unsigned_meta.res Ok) (three_types.res Ok) - (threea.res Ok) (top.res Ok) (topdec.res Ok) (topdec_ver1.res Ok) - (topdec_ver2.res Ok) (toplevel_macrostmt.res Ok) (toplevel_struct.res Ok) - (tup.res Ok) (twoproto.res Ok) (ty.res Ok) (ty1.res Ok) (ty_tyexp.res Ok) - (tydisj.res Ok) (type.res Ok) (type1.res Ok) (type_annotated.res Ok) - (type_ver1.res Ok) - (type_ver2.res - (Pb - "INCORRECT:PB parsing only in generated-file\n diff (result(<) vs expected_result(>)) = \n @@ -1,5 +1,5 @@\n int foo() {\n - int[10] *x;\n + int *x[10];\n return 0;\n }\n \n")) - (typedef.res Ok) - (typedef3.res - (Pb - "INCORRECT:diff token: link VS p_dev\nFile , line 7, column 29, charpos = 137\n around = 'link', whole content = \tunsigned int iobase = info->link.io.BasePort1;\nFile \"tests/typedef3.res\", line 7, column 29, charpos = 137\n around = 'p_dev', whole content = \tunsigned int iobase = info->p_dev->io.BasePort1;\n\n diff (result(<) vs expected_result(>)) = \n @@ -4,7 +4,7 @@\n \n static void should_work(foo *info)\n {\n -\tunsigned int iobase = info->link.io.BasePort1;\n +\tunsigned int iobase = info->p_dev->io.BasePort1;\n }\n \n static void does_work(struct bluecard_info_t *info)\n")) - (typedef_double.res Ok) - (typeof.res - (Pb - "INCORRECT:diff token: x VS sizeof\nFile , line 3, column 4, charpos = 26\n around = 'x', whole content = f(x);\nFile \"tests/typeof.res\", line 3, column 4, charpos = 26\n around = 'sizeof', whole content = f(sizeof(struct foo));\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,4 +1,4 @@\n int main() {\n int x;\n - f(x);\n + f(sizeof(struct foo));\n }\n")) - (useless_cast.res Ok) (varargs.res Ok) (video1bis.res Ok) (void.res Ok) - (vpos.res Ok) (whitespace.res Ok) (wierd_argument.res Ok) - (wierdinit.res - (Pb - "seems incorrect, but only because of code that was not parsablediff token: dev_link_t VS struct\nFile \"tests/wierdinit.c\", line 4, column 1, charpos = 27\n around = 'dev_link_t', whole content = \tdev_link_t *link;\nFile \"tests/wierdinit.res\", line 4, column 1, charpos = 27\n around = 'struct', whole content = \tstruct pcmcia_device *link;\n")) - (ws2.res Ok) (xfield.res Ok) (y2.res Ok) (zero.res Ok)) \ No newline at end of file diff --git a/tests/SCORE_expected.sexp.save b/tests/SCORE_expected.sexp.save deleted file mode 100644 index 955780d..0000000 --- a/tests/SCORE_expected.sexp.save +++ /dev/null @@ -1,154 +0,0 @@ -((a.res Ok) (a3d.res Ok) (a_and_e.res Ok) (a_and_e_ver1.res Ok) - (addelse.res Ok) (addif.res Ok) (addif1.res Ok) (addif2.res Ok) - (after_if.res Ok) (anon.res Ok) (ar.res Ok) (arg.res Ok) (argument.res Ok) - (array_init.res Ok) (array_size.res Ok) (arraysz.res Ok) (b1.res Ok) - (b2.res Ok) - (bad_iso_example.res - (Pb - "INCORRECT:diff token: ( VS x\nFile \"tests/bad_iso_example.c\", line 2, column 6, charpos = 19\n around = '(', whole content = if ((x = 3)) return;\nFile \"tests/bad_iso_example.res\", line 2, column 6, charpos = 19\n around = 'x', whole content = if (x) return;\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,4 +1,4 @@\n int main() {\n - if ((x = 3)) return;\n + if (x) return;\n }\n \n")) - (bad_ptr_print.res Ok) (bad_typedef.res Ok) (badexp.res Ok) - (badpos.res - (Pb - "PROBLEM\n exn = Failure(\"rule starting on line 1: already tagged token:\\nC code context\\nFile \\\"tests/badpos.c\\\", line 5, column 30, charpos = 139\\n around = 'reg_ptr', whole content = \\t (int) -(((struct pt_regs *) reg_ptr)->orig_eax + 2));\")\n")) - (badtypedef.res Ok) (badzero.res Ok) (ben.res Ok) (bitfield.res Ok) - (braces.res Ok) (break.res Ok) (bug1.res Ok) - (bugloop.res - (Pb - "INCORRECT:diff token: PF_FREEZE VS )\nFile , line 12, column 16, charpos = 390\n around = 'PF_FREEZE', whole content = \t\t\trefrigerator(PF_FREEZE);\nFile \"tests/bugloop.res\", line 8, column 16, charpos = 160\n around = ')', whole content = \t\t\trefrigerator();\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,7 +1,3 @@\n -/* this doesn't work, because on the paths where we don't find refrigerator,\n -we expect to reach Exit without first going through current->flags & PF_FREEZE,\n -but of course any path that goes around the loop does precisely that */\n -\n static int stir_transmit_thread(void *arg)\n {\n \n @@ -9,7 +5,7 @@\n \t{\n \t\t/* if suspending, then power off and wait */\n \t\tif (unlikely(freezing(current))) {\n -\t\t\trefrigerator(PF_FREEZE);\n +\t\t\trefrigerator();\n \n \t\t}\n \t}\n")) - (bugon.res Ok) (cards.res Ok) (cast.res Ok) (cast_iso.res Ok) - (compare.res Ok) (const.res Ok) (const1bis.res Ok) (const_adding.res Ok) - (const_array.res Ok) (const_implicit_iso.res Ok) (constty.res Ok) - (constx.res Ok) (cs_check.res Ok) (cst.res Ok) (csw.res Ok) - (dbg.res - (Pb - "INCORRECT:diff token: else VS (\nFile , line 8, column 2, charpos = 133\n around = 'else', whole content = \t\telse pr = NULL;(\"PCI\");\nFile \"tests/dbg.res\", line 7, column 5, charpos = 130\n around = '(', whole content = \t\tDBG(\"PCI\");\n\n diff (result(<) vs expected_result(>)) = \n @@ -4,6 +4,6 @@\n \tstruct resource *pr, *r = &dev->resource[idx];\n \n \tif (pr)\n -\t\tDBG\n -\t\telse pr = NULL;(\"PCI\");\n +\t\tDBG(\"PCI\");\n +\telse pr = NULL;\n }\n")) - (dbg1.res - (Pb - "INCORRECT:diff token: E VS (\nFile , line 5, column 2, charpos = 75\n around = 'E', whole content = \t\tE = NULL;(\"PCI\");\nFile \"tests/dbg1.res\", line 4, column 5, charpos = 72\n around = '(', whole content = \t\tDBG(\"PCI\");\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,6 +1,6 @@\n \n static inline void alloc_resource(struct pci_dev *dev, int idx)\n {\n -\t\tDBG\n -\t\tE = NULL;(\"PCI\");\n +\t\tDBG(\"PCI\");\n +\t\tE = NULL;\n }\n")) - (dc_close.res Ok) (debug.res Ok) (dec.res Ok) (decl.res Ok) (decl2.res Ok) - (decl_space.res Ok) - (decl_split.res - (Pb - "INCORRECT:diff token: int VS }\nFile \"tests/decl_split.c\", line 2, column 8, charpos = 27\n around = 'int', whole content = int x, y;\nFile \"tests/decl_split.res\", line 2, column 0, charpos = 19\n around = '}', whole content = }\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,3 +1,2 @@\n int func(int i) { \n - int x, y;\n }\n")) - (define_exp.res Ok) (define_param.res Ok) (deftodo.res Ok) (deref.res Ok) - (devlink.res Ok) (disjexpr.res Ok) (disjexpr_ver1.res Ok) - (disjexpr_ver2.res Ok) (distribute.res Ok) (double.res Ok) - (double_assign.res Ok) (double_switch.res Ok) (doublepos.res Ok) - (doubleswitch.res Ok) (dowhile.res Ok) (dropf.res Ok) (dropparam.res Ok) - (edots.res Ok) (edots_ver1.res Ok) (empty.res Ok) (end_commas.res Ok) - (endif.res Ok) (enum.res Ok) (exp.res Ok) (expnest.res Ok) (expopt.res Ok) - (expopt2.res Ok) (expopt3.res Ok) (expopt3_ver1.res Ok) - (expopt3_ver2.res Ok) (fields.res Ok) (fieldsmin.res Ok) (find_long.res Ok) - (fix_flow_need.res Ok) (fn_todo.res Ok) (fnptr.res Ok) (fnret.res Ok) - (four.res Ok) (foura.res Ok) (fp.res Ok) (fsh.res Ok) (fun.res Ok) - (gilles-question.res Ok) (gotobreak.res Ok) (hd.res Ok) (headers.res Ok) - (hex.res Ok) (hil1.res Ok) (if.res Ok) (ifbr.res Ok) (ifdef1.res Ok) - (ifdef2.res Ok) - (ifdef3.res - (Pb - "PROBLEM\n exn = Lexer_cocci.Lexical(\"unrecognised symbol, in token rule: #\")\n")) - (ifdef4.res Ok) (ifdef5.res Ok) (ifdef6.res Ok) (ifdef6a.res Ok) - (ifdefmeta.res Ok) (ifdefmeta1.res Ok) (ifdefmeta2.res Ok) - (ifdefmeta3.res Ok) - (ifdefmeta4.res - (Pb - "PROBLEM\n exn = Unix.Unix_error(20, \"stat\", \"tests/ifdefmeta4.cocci\")\n")) - (ifend.res Ok) (ifzer.res Ok) (inc.res Ok) - (incdir.res - (Pb - "INCORRECT:diff token: x VS 12\nFile \"tests/incdir.c\", line 4, column 6, charpos = 46\n around = 'x', whole content = foo(x);\nFile \"tests/incdir.res\", line 4, column 6, charpos = 46\n around = '12', whole content = foo(12);\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,5 +1,5 @@\n #include \"sub/incdir2.c\"\n \n int main () {\n - foo(x);\n + foo(12);\n }\n")) - (incl.res Ok) (inclifdef.res Ok) (include.res Ok) - (incompatible_value.res Ok) (inherited.res Ok) (inherited_ver1.res Ok) - (inhpos.res Ok) (initializer.res Ok) (initializer_many_fields.res Ok) - (inline.res Ok) (isococci.res Ok) (isotest.res Ok) (isotest2.res Ok) - (iterator.res Ok) - (jloop1.res - (Pb - "PROBLEM\n exn = Failure(\"minus: parse error: \\n = File \\\"tests/jloop1.cocci\\\", line 10, column 3, charpos = 129\\n around = '...>', whole content = ...>\\n\")\n")) - (julia10.res Ok) (julia7.res Ok) (keep_comma.res Ok) (km.res Ok) - (kmalloc.res Ok) (kmc.res Ok) (ktype.res Ok) - (labels_metastatement.res - (Pb - "INCORRECT:diff token: { VS x\nFile , line 4, column 2, charpos = 30\n around = '{', whole content = {\nFile \"tests/labels_metastatement.res\", line 4, column 4, charpos = 32\n around = 'x', whole content = x = 3; foo();\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,15 +1,10 @@\n int foo(int i) {\n \n if(1) {\n - {\n - x = 3;\n - foo();\n - z = 4;\n - foo();\n - }\n - foo();\n - }\n - foo(); // we dont want that it add both foo on the } and on the endif\n + x = 3; foo();\n + z = 4; foo();\n + } // we dont want that it add both foo on the } and on the endif\n // (note: but need correct endif accrochage)\n + foo();\n \n }\n")) - (labels_metastatement_ver1.res Ok) (local.res Ok) (localid.res Ok) - (longconst.res Ok) (longlong.res Ok) (longlongint.res Ok) (loop.res Ok) - (lvalue.res Ok) (macro.res Ok) (macro_int16.res Ok) (match_no_meta.res Ok) - (max.res Ok) (memory.res (Pb "PROBLEM\n exn = Out of memory\n")) - (metahex.res - (Pb - "INCORRECT:diff token: f VS }\nFile \"tests/metahex.c\", line 2, column 2, charpos = 15\n around = 'f', whole content = f(3);\nFile \"tests/metahex.res\", line 2, column 0, charpos = 13\n around = '}', whole content = }\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,4 +1,2 @@\n int main() {\n - f(3);\n - g(0x03);\n }\n")) - (metaruleelem.res Ok) (metastatement2.res Ok) (metastatement_for.res Ok) - (metastatement_if.res Ok) (minstruct.res Ok) (minusdots.res Ok) - (minusdots_ver1.res Ok) - (multi_func1.res - (Pb - "PROBLEM\n exn = Failure(\"minus: parse error: \\n = File \\\"tests/multi_func1.cocci\\\", line 12, column 2, charpos = 102\\n around = 'fn2', whole content = fn2(...) {\\n\")\n")) - (multiplus.res Ok) (multitype.res Ok) (multitypedef.res Ok) - (multivars.res Ok) (nest.res Ok) (nestone.res Ok) (nestseq.res Ok) - (neststruct.res Ok) (nl.res Ok) (nocast.res Ok) (not.res Ok) (notest.res Ok) - (noty.res Ok) (null_type.res Ok) - (oddifdef.res - (Pb - "INCORRECT:diff token: #else\n VS x\nFile , line 10, column 0, charpos = 114\n around = '#else\n', whole content = #else\nFile \"tests/oddifdef.res\", line 10, column 2, charpos = 116\n around = 'x', whole content = x = 0;\n\n diff (result(<) vs expected_result(>)) = \n @@ -7,8 +7,9 @@\n a = 5;\n \n #ifdef FOO\n + x = 0;\n #else\n - \n + x = 0;\n #endif\n }\n \n @@ -21,8 +22,9 @@\n a = 3;\n \n #ifdef FOO\n + x = 0;\n #else\n - \n + x = 0;\n #endif\n }\n \n @@ -35,7 +37,8 @@\n #endif\n \n #ifdef FOO\n + x = 0;\n #else\n - \n + x = 0;\n #endif\n }\n")) - (of.res Ok) (oneline.res Ok) (opt.res Ok) (optional_qualifier.res Ok) - (optional_storage.res Ok) (orexp.res Ok) (overshoot.res Ok) (param.res Ok) - (param_end.res Ok) (param_ver1.res Ok) (parameters_dots.res Ok) - (partial.res Ok) - (pb_distribute_type.res - (Pb - "INCORRECT:PB parsing only in generated-file\n diff (result(<) vs expected_result(>)) = \n @@ -5,11 +5,11 @@\n \n \n int foo() {\n - int * *x;\n + int **x;\n return 0;\n }\n \n int foo() {\n - int[45] *x;\n + int (*x)[45];\n return 0;\n }\n")) - (pb_distribute_type2.res - (Pb - "INCORRECT:PB parsing only in generated-file\n diff (result(<) vs expected_result(>)) = \n @@ -1,5 +1,5 @@\n int foo() {\n - int* x;\n + int *x;\n return 0;\n }\n \n @@ -10,6 +10,6 @@\n }\n \n int foo() {\n - int x[45]*;\n + int (*x)[45];\n return 0;\n }\n")) - (pb_distribute_type3.res - (Pb "PROBLEM\n exn = Failure(\"line 7: index 53 53 already used\\n\")\n")) - (pb_distribute_type4.res Ok) (pb_params_iso.res Ok) - (pb_parsing_macro.res Ok) (pb_tag_symbols.res Ok) (pmac.res Ok) - (posiso.res Ok) (positionc.res Ok) (post.res Ok) (print_return.res Ok) - (proto.res Ok) (proto2.res Ok) (proto_ver1.res Ok) (proto_ver2.res Ok) - (protoassert.res Ok) (protox.res Ok) (rcu3.res Ok) - (remstruct.res - (Pb - "INCORRECT:not same number of entities (func, decl, ...)\n diff (result(<) vs expected_result(>)) = \n @@ -1,10 +1,3 @@\n -\n - .ack = mpuio_ack_irq,\n - .mask = mpuio_mask_irq,\n - .unmask = mpuio_unmask_irq\n -\n - .b = 15,\n -\n int hello ( String input )\n {\n String input = input.lowercase();\n")) - (replace_typedef.res Ok) (reserved.res Ok) (retmacro.res Ok) (rets.res Ok) - (return.res Ok) (return_implicit.res Ok) (retval.res Ok) (same_expr.res Ok) - (scope_problem.res - (Pb - "INCORRECT:diff token: } VS a\nFile , line 6, column 2, charpos = 44\n around = '}', whole content = }\nFile \"tests/scope_problem.res\", line 7, column 4, charpos = 49\n around = 'a', whole content = a = 2;\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,8 +1,10 @@\n void main(int i) {\n \n \n +\n if(1) {\n int a;\n + a = 2;\n }\n \n \n")) - (serio.res - (Pb - "INCORRECT:diff token: init_MUTEX VS mutex_init\nFile \"tests/serio.c\", line 7, column 1, charpos = 130\n around = 'init_MUTEX', whole content = \tinit_MUTEX(&serio->drv_sem);\nFile \"tests/serio.res\", line 7, column 1, charpos = 130\n around = 'mutex_init', whole content = \tmutex_init(&serio->new_lock);\n\n diff (result(<) vs expected_result(>)) = \n @@ -4,5 +4,5 @@\n \n static void serio_init_port(struct serio *serio)\n {\n -\tinit_MUTEX(&serio->drv_sem);\n +\tmutex_init(&serio->new_lock);\n }\n")) - (shared_brace.res Ok) (signed.res Ok) (sis.res Ok) (sizeof.res Ok) - (sizeof_julia.res Ok) (skip.res Ok) (sp.res Ok) (spaces.res Ok) (spl.res Ok) - (static.res (Pb "PROBLEM\n exn = Common.Impossible\n")) (stm1.res Ok) - (stm10.res Ok) (stm10_ver1.res Ok) (stm2.res Ok) (stm3.res Ok) (stm4.res Ok) - (stm5.res Ok) (stm6.res Ok) (stm7.res Ok) (stm8.res Ok) (stmt.res Ok) - (strangeorder.res Ok) (string.res Ok) (struct.res Ok) - (struct_metavar.res Ok) (struct_typedef.res Ok) (structfoo.res Ok) - (substruct.res Ok) (sw.res Ok) (switch.res Ok) (td.res Ok) (test0.res Ok) - (test1.res Ok) (test10.res Ok) (test10_ver1.res Ok) (test11.res Ok) - (test11_ver1.res Ok) (test12.res Ok) (test2.res Ok) (test3.res Ok) - (test4.res Ok) (test5.res Ok) (test5_ver1.res Ok) (test6.res Ok) - (test7.res Ok) (test8.res Ok) (test9.res Ok) (test_unsigned_meta.res Ok) - (three_types.res Ok) (threea.res Ok) (top.res Ok) (topdec.res Ok) - (topdec_ver1.res Ok) (topdec_ver2.res Ok) (toplevel_macrostmt.res Ok) - (toplevel_struct.res Ok) (tup.res Ok) (twoproto.res Ok) (ty.res Ok) - (ty1.res Ok) (ty_tyexp.res Ok) (tydisj.res Ok) (type.res Ok) (type1.res Ok) - (type_annotated.res Ok) (type_ver1.res Ok) - (type_ver2.res - (Pb - "INCORRECT:PB parsing only in generated-file\n diff (result(<) vs expected_result(>)) = \n @@ -1,5 +1,5 @@\n int foo() {\n - int[10] *x;\n + int *x[10];\n return 0;\n }\n \n")) - (typedef.res Ok) - (typedef3.res - (Pb - "INCORRECT:diff token: link VS p_dev\nFile , line 7, column 29, charpos = 137\n around = 'link', whole content = \tunsigned int iobase = info->link.io.BasePort1;\nFile \"tests/typedef3.res\", line 7, column 29, charpos = 137\n around = 'p_dev', whole content = \tunsigned int iobase = info->p_dev->io.BasePort1;\n\n diff (result(<) vs expected_result(>)) = \n @@ -4,7 +4,7 @@\n \n static void should_work(foo *info)\n {\n -\tunsigned int iobase = info->link.io.BasePort1;\n +\tunsigned int iobase = info->p_dev->io.BasePort1;\n }\n \n static void does_work(struct bluecard_info_t *info)\n")) - (typedef_double.res Ok) - (typeof.res - (Pb - "INCORRECT:diff token: x VS sizeof\nFile , line 3, column 4, charpos = 26\n around = 'x', whole content = f(x);\nFile \"tests/typeof.res\", line 3, column 4, charpos = 26\n around = 'sizeof', whole content = f(sizeof(struct foo));\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,4 +1,4 @@\n int main() {\n int x;\n - f(x);\n + f(sizeof(struct foo));\n }\n")) - (useless_cast.res Ok) (varargs.res Ok) (video1bis.res Ok) (void.res Ok) - (vpos.res Ok) (whitespace.res Ok) (wierd_argument.res Ok) - (wierdinit.res - (Pb - "seems incorrect, but only because of code that was not parsablediff token: dev_link_t VS struct\nFile \"tests/wierdinit.c\", line 4, column 1, charpos = 27\n around = 'dev_link_t', whole content = \tdev_link_t *link;\nFile \"tests/wierdinit.res\", line 4, column 1, charpos = 27\n around = 'struct', whole content = \tstruct pcmcia_device *link;\n")) - (ws2.res Ok) (xfield.res Ok) (y2.res Ok) (zero.res Ok)) \ No newline at end of file diff --git a/tests/addaft.c b/tests/addaft.c new file mode 100644 index 0000000..43ea673 --- /dev/null +++ b/tests/addaft.c @@ -0,0 +1,16 @@ +int main () { + foo(); + if (x) { + a(); + b(); + c(); + } + foo(); + while (x) { + a(); + if (b()) continues; + c(); + } + foo(); + r(); +} diff --git a/tests/addaft.cocci b/tests/addaft.cocci new file mode 100644 index 0000000..f39e8cb --- /dev/null +++ b/tests/addaft.cocci @@ -0,0 +1,7 @@ +@@ +statement S; +@@ + + foo(); +- S ++ bar(); diff --git a/tests/addaft.res b/tests/addaft.res new file mode 100644 index 0000000..59e4610 --- /dev/null +++ b/tests/addaft.res @@ -0,0 +1,8 @@ +int main () { + foo(); + bar(); + foo(); + bar(); + foo(); + bar(); +} diff --git a/tests/addbefore.c b/tests/addbefore.c new file mode 100644 index 0000000..0edf6d2 --- /dev/null +++ b/tests/addbefore.c @@ -0,0 +1,8 @@ +int main () { + if (x) { + goto out; + } + after(); +out: + return 0; +} diff --git a/tests/addbefore.cocci b/tests/addbefore.cocci new file mode 100644 index 0000000..47c85b0 --- /dev/null +++ b/tests/addbefore.cocci @@ -0,0 +1,8 @@ +@@ +statement S; +@@ + + if (...) { ++ foo(); + S + } \ No newline at end of file diff --git a/tests/addbefore.res b/tests/addbefore.res new file mode 100644 index 0000000..7c0ba20 --- /dev/null +++ b/tests/addbefore.res @@ -0,0 +1,9 @@ +int main () { + if (x) { + foo(); + goto out; + } + after(); +out: + return 0; +} diff --git a/tests/addbeforeafter.c b/tests/addbeforeafter.c new file mode 100644 index 0000000..0edf6d2 --- /dev/null +++ b/tests/addbeforeafter.c @@ -0,0 +1,8 @@ +int main () { + if (x) { + goto out; + } + after(); +out: + return 0; +} diff --git a/tests/addbeforeafter.cocci b/tests/addbeforeafter.cocci new file mode 100644 index 0000000..7d09a88 --- /dev/null +++ b/tests/addbeforeafter.cocci @@ -0,0 +1,9 @@ +@@ +statement S; +@@ + + if (...) { ++ foo(); + S ++ bar(); + } \ No newline at end of file diff --git a/tests/addbeforeafter.res b/tests/addbeforeafter.res new file mode 100644 index 0000000..e84ab73 --- /dev/null +++ b/tests/addbeforeafter.res @@ -0,0 +1,10 @@ +int main () { + if (x) { + foo(); + goto out; + bar(); + } + after(); +out: + return 0; +} diff --git a/tests/addtoo.c b/tests/addtoo.c new file mode 100644 index 0000000..5ae6cc5 --- /dev/null +++ b/tests/addtoo.c @@ -0,0 +1,16 @@ +int main () { + if (x) { + a(); + b(); + c(); + } + foo(); + while (x) { + a(); + if (b()) continues; + c(); + } + foo(); + r(); + foo(); +} diff --git a/tests/addtoo.cocci b/tests/addtoo.cocci new file mode 100644 index 0000000..e15c736 --- /dev/null +++ b/tests/addtoo.cocci @@ -0,0 +1,7 @@ +@@ +statement S; +@@ + ++ bar(); +- S + foo(); diff --git a/tests/addtoo.res b/tests/addtoo.res new file mode 100644 index 0000000..49b8509 --- /dev/null +++ b/tests/addtoo.res @@ -0,0 +1,8 @@ +int main () { + bar(); + foo(); + bar(); + foo(); + bar(); + foo(); +} diff --git a/tests/befS.c b/tests/befS.c new file mode 100644 index 0000000..3f9502a --- /dev/null +++ b/tests/befS.c @@ -0,0 +1,14 @@ +int main () { + xxx(); + if(y) { + rrr(); + } +} + + +int d() {} + +int main2 () { + yyy(); + xxx(); +} diff --git a/tests/befS.cocci b/tests/befS.cocci new file mode 100644 index 0000000..cbbd8cc --- /dev/null +++ b/tests/befS.cocci @@ -0,0 +1,6 @@ +@@ +statement S; +@@ + ++ foo(); + S diff --git a/tests/befS.res b/tests/befS.res new file mode 100644 index 0000000..1569e75 --- /dev/null +++ b/tests/befS.res @@ -0,0 +1,22 @@ +int main () { + foo(); + xxx(); + foo(); + if(y) { + foo(); + { + foo(); + rrr(); + } +} +} + + +int d() {} + +int main2 () { + foo(); + yyy(); + foo(); + xxx(); +} diff --git a/tests/doundo.c b/tests/doundo.c new file mode 100644 index 0000000..97c6ccd --- /dev/null +++ b/tests/doundo.c @@ -0,0 +1,8 @@ +s8 *noevent; + +int main() +{ + const s8 (*queue_priority_mapping)[2]; + s8 *noevent; + foo(); +} diff --git a/tests/doundo.cocci b/tests/doundo.cocci new file mode 100644 index 0000000..19afe9e --- /dev/null +++ b/tests/doundo.cocci @@ -0,0 +1,11 @@ +@@ +@@ + +- foo(); ++ xxx(); + +@@ +@@ + +- xxx(); ++ new_foo(); diff --git a/tests/doundo.res b/tests/doundo.res new file mode 100644 index 0000000..3510ba0 --- /dev/null +++ b/tests/doundo.res @@ -0,0 +1,8 @@ +s8 *noevent; + +int main() +{ + const s8 (*queue_priority_mapping)[2]; + s8 *noevent; + new_foo(); +} diff --git a/tests/ifb.c b/tests/ifb.c new file mode 100644 index 0000000..28001cd --- /dev/null +++ b/tests/ifb.c @@ -0,0 +1,12 @@ +int main () { + if (a) { + if (x) { + a = 3; + if (m) goto foo; + b = 4; +foo: + c = 6; + } + } +} + diff --git a/tests/justremove.c b/tests/justremove.c new file mode 100644 index 0000000..77c8c56 --- /dev/null +++ b/tests/justremove.c @@ -0,0 +1,17 @@ +int main () { + if (x) { + a(); + b(); + c(); + } + foo(); + while (x) { + a(); + if (b()) continues; + c(); + } + foo(); + r(); + foo(); +} + diff --git a/tests/justremove.cocci b/tests/justremove.cocci new file mode 100644 index 0000000..e11ab9e --- /dev/null +++ b/tests/justremove.cocci @@ -0,0 +1,6 @@ +@@ +statement S; +@@ + +- S + foo(); diff --git a/tests/justremove.res b/tests/justremove.res new file mode 100644 index 0000000..adfdd0d --- /dev/null +++ b/tests/justremove.res @@ -0,0 +1,6 @@ +int main () { + foo(); + foo(); + foo(); +} + diff --git a/tests/labels_metastatement.res b/tests/labels_metastatement.res index 3e22b44..990d42c 100644 --- a/tests/labels_metastatement.res +++ b/tests/labels_metastatement.res @@ -1,9 +1,9 @@ int foo(int i) { - if(1) { + if(1) {{ x = 3; foo(); z = 4; foo(); - } // we dont want that it add both foo on the } and on the endif + } foo(); } // we dont want that it add both foo on the } and on the endif // (note: but need correct endif accrochage) foo(); diff --git a/tests/regexp.c b/tests/regexp.c new file mode 100644 index 0000000..0030562 --- /dev/null +++ b/tests/regexp.c @@ -0,0 +1,9 @@ +int main(void) { + +int foo; +int bar; +int foobar; +int barfoobar; +int barfoo; + +} diff --git a/tests/regexp.cocci b/tests/regexp.cocci new file mode 100644 index 0000000..5cbcf90 --- /dev/null +++ b/tests/regexp.cocci @@ -0,0 +1,44 @@ +@anyid@ +type t; +identifier id; +fresh identifier new = id ## "_is_an_id"; +@@ + +t id; ++t new; + +@contains@ +type t; +identifier anyid.id ~= ".*foo"; +fresh identifier contains = id ##"_contains_foo"; +@@ + +t id; ++t contains; + +@nocontain@ +type t; +identifier anyid.id !~= ".*foo"; +fresh identifier nocontain = id ##"_doesn_t_contain_foo"; +@@ + +t id; ++t nocontain; + +@endsby@ +type t; +identifier anyid.id ~= ".*foo$"; +fresh identifier endsby = id ##"_ends_by_foo"; +@@ + +t id; ++t endsby; + +@beginsby@ +type t; +identifier anyid.id ~= "^foo"; +fresh identifier beginsby = id ##"_begins_by_foo"; +@@ + +t id; ++t beginsby; diff --git a/tests/regexp.res b/tests/regexp.res new file mode 100644 index 0000000..34aac67 --- /dev/null +++ b/tests/regexp.res @@ -0,0 +1,23 @@ +int main(void) { + +int foo; +int foo_begins_by_foo; +int foo_ends_by_foo; +int foo_contains_foo; +int foo_is_an_id; +int bar; +int bar_doesn_t_contain_foo; +int bar_is_an_id; +int foobar; +int foobar_begins_by_foo; +int foobar_contains_foo; +int foobar_is_an_id; +int barfoobar; +int barfoobar_contains_foo; +int barfoobar_is_an_id; +int barfoo; +int barfoo_ends_by_foo; +int barfoo_contains_foo; +int barfoo_is_an_id; + +} diff --git a/tests/regexp2.c b/tests/regexp2.c new file mode 100644 index 0000000..46db6a6 --- /dev/null +++ b/tests/regexp2.c @@ -0,0 +1,10 @@ + +int main(void) { + +int t0 = FOO; +int t1 = BAR; +int t2 = FOOBAR; +int t3 = BARFOOBAR; +int t4 = BARFOO; + +} diff --git a/tests/regexp2.cocci b/tests/regexp2.cocci new file mode 100644 index 0000000..d510a1d --- /dev/null +++ b/tests/regexp2.cocci @@ -0,0 +1,49 @@ +@anyid@ +type t; +identifier id; +constant cst; +fresh identifier new = id ## "_is_constant"; +@@ + +t id = cst; ++t new; + +@contains@ +type t; +identifier anyid.id; +constant anyid.cst ~= ".*FOO"; +fresh identifier contains = id ##"_equals_cst_that_contains_FOO"; +@@ + +t id = cst; ++t contains; + +@nocontain@ +type t; +identifier anyid.id; +constant anyid.cst !~= ".*FOO"; +fresh identifier nocontain = id ##"_equals_cst_that_doesn_t_contain_FOO"; +@@ + +t id = cst; ++t nocontain; + +@endsby@ +type t; +identifier anyid.id; +constant anyid.cst ~= ".*FOO$"; +fresh identifier endsby = id ##"_equals_cst_that_ends_by_FOO"; +@@ + +t id = cst; ++t endsby; + +@beginsby@ +type t; +identifier anyid.id; +constant anyid.cst ~= "^FOO"; +fresh identifier beginsby = id ##"_equals_cst_that_begins_by_FOO"; +@@ + +t id = cst; ++t beginsby; diff --git a/tests/regexp2.res b/tests/regexp2.res new file mode 100644 index 0000000..b2005ce --- /dev/null +++ b/tests/regexp2.res @@ -0,0 +1,24 @@ + +int main(void) { + +int t0 = FOO; +int t0_equals_cst_that_begins_by_FOO; +int t0_equals_cst_that_ends_by_FOO; +int t0_equals_cst_that_contains_FOO; +int t0_is_constant; +int t1 = BAR; +int t1_equals_cst_that_doesn_t_contain_FOO; +int t1_is_constant; +int t2 = FOOBAR; +int t2_equals_cst_that_begins_by_FOO; +int t2_equals_cst_that_contains_FOO; +int t2_is_constant; +int t3 = BARFOOBAR; +int t3_equals_cst_that_contains_FOO; +int t3_is_constant; +int t4 = BARFOO; +int t4_equals_cst_that_ends_by_FOO; +int t4_equals_cst_that_contains_FOO; +int t4_is_constant; + +} diff --git a/tests/regexp3.c b/tests/regexp3.c new file mode 100644 index 0000000..e38d53b --- /dev/null +++ b/tests/regexp3.c @@ -0,0 +1,11 @@ + +int main(void) { + +char *t0 = "FOO"; +char *t1 = "BAR"; +char *t2 = "FOOBAR"; +char *t3 = "BARFOOBAR"; +char *t4 = "BARFOO"; +char *s0 = "%s"; + +} diff --git a/tests/regexp3.cocci b/tests/regexp3.cocci new file mode 100644 index 0000000..7bc469e --- /dev/null +++ b/tests/regexp3.cocci @@ -0,0 +1,60 @@ +@anyid@ +type t; +identifier id; +constant char* cst; +fresh identifier new = id ## "_is_constant"; +@@ + +t id = cst; ++t new; + +@contains@ +type t; +identifier anyid.id; +constant char* anyid.cst ~= ".*FOO"; +fresh identifier contains = id ##"_equals_cst_that_contains_FOO"; +@@ + +t id = cst; ++t contains; + +@nocontain@ +type t; +identifier anyid.id; +constant char* anyid.cst !~= ".*FOO"; +fresh identifier nocontain = id ##"_equals_cst_that_doesn_t_contain_FOO"; +@@ + +t id = cst; ++t nocontain; + +@endsby@ +type t; +identifier anyid.id; +constant char* anyid.cst ~= ".*FOO$"; +fresh identifier endsby = id ##"_equals_cst_that_ends_by_FOO"; +@@ + +t id = cst; ++t endsby; + +@beginsby@ +type t; +identifier anyid.id; +constant char* anyid.cst ~= "^FOO"; +fresh identifier beginsby = id ##"_equals_cst_that_begins_by_FOO"; +@@ + +t id = cst; ++t beginsby; + +@format@ +type t; +identifier anyid.id; +constant char* anyid.cst ~= ".*%s"; +fresh identifier strformat = id ##"_is_a_format_for_at_least_a_string"; +@@ + +t id = cst; ++t strformat; + diff --git a/tests/regexp3.res b/tests/regexp3.res new file mode 100644 index 0000000..4842b3a --- /dev/null +++ b/tests/regexp3.res @@ -0,0 +1,28 @@ + +int main(void) { + +char *t0 = "FOO"; +char * t0_equals_cst_that_begins_by_FOO; +char * t0_equals_cst_that_ends_by_FOO; +char * t0_equals_cst_that_contains_FOO; +char * t0_is_constant; +char *t1 = "BAR"; +char * t1_equals_cst_that_doesn_t_contain_FOO; +char * t1_is_constant; +char *t2 = "FOOBAR"; +char * t2_equals_cst_that_begins_by_FOO; +char * t2_equals_cst_that_contains_FOO; +char * t2_is_constant; +char *t3 = "BARFOOBAR"; +char * t3_equals_cst_that_contains_FOO; +char * t3_is_constant; +char *t4 = "BARFOO"; +char * t4_equals_cst_that_ends_by_FOO; +char * t4_equals_cst_that_contains_FOO; +char * t4_is_constant; +char *s0 = "%s"; +char * s0_is_a_format_for_at_least_a_string; +char * s0_equals_cst_that_doesn_t_contain_FOO; +char * s0_is_constant; + +} diff --git a/tests/sizestar.c b/tests/sizestar.c new file mode 100644 index 0000000..6e56520 --- /dev/null +++ b/tests/sizestar.c @@ -0,0 +1,10 @@ +int main () { + max = num_var_ranges; + if (fcount == NULL) { + fcount = kzalloc(max * sizeof *fcount, GFP_KERNEL); + if (!fcount) + return -ENOMEM; + FILE_FCOUNT(file) = fcount; + } +} + diff --git a/tests/sizestar.cocci b/tests/sizestar.cocci new file mode 100644 index 0000000..bb8b05b --- /dev/null +++ b/tests/sizestar.cocci @@ -0,0 +1,6 @@ +@@ +expression E1,E2,E3; +@@ + +- kzalloc(E1 * E2,E3) ++ kzalloc(E1,E2,E3) \ No newline at end of file diff --git a/tests/sizestar.res b/tests/sizestar.res new file mode 100644 index 0000000..b7162ef --- /dev/null +++ b/tests/sizestar.res @@ -0,0 +1,10 @@ +int main () { + max = num_var_ranges; + if (fcount == NULL) { + fcount = kzalloc(max, sizeof *fcount, GFP_KERNEL); + if (!fcount) + return -ENOMEM; + FILE_FCOUNT(file) = fcount; + } +} + diff --git a/tests/test_s.c b/tests/test_s.c new file mode 100644 index 0000000..0927abb --- /dev/null +++ b/tests/test_s.c @@ -0,0 +1,41 @@ +int main () { + if (x-one) { + one(); + } + if (x-two) { + one(); + two(); + } + if (x-three) { + one(); + two(); + three(); + } + if (two) { + while (x) { + one(); + } + while (x) { + one(); + two(); + } + } + if (one) { + while (x) { + one(); + } + } + if (three) { + while (x) { + one(); + } + while (x) { + one(); + two(); + } + while (x) { + one(); + two(); + } + } +} diff --git a/tests/test_s.cocci b/tests/test_s.cocci new file mode 100644 index 0000000..3718180 --- /dev/null +++ b/tests/test_s.cocci @@ -0,0 +1,13 @@ +@@ +statement S1,S2; +expression E; +@@ + + if ( +- E ++ 12 + ) + { + S1 + S2 + } diff --git a/tests/test_s.res b/tests/test_s.res new file mode 100644 index 0000000..bde1817 --- /dev/null +++ b/tests/test_s.res @@ -0,0 +1,41 @@ +int main () { + if (x-one) { + one(); + } + if (12) { + one(); + two(); + } + if (x-three) { + one(); + two(); + three(); + } + if (12) { + while (x) { + one(); + } + while (x) { + one(); + two(); + } + } + if (one) { + while (x) { + one(); + } + } + if (three) { + while (x) { + one(); + } + while (x) { + one(); + two(); + } + while (x) { + one(); + two(); + } + } +} diff --git a/tests/tyex.c b/tests/tyex.c new file mode 100644 index 0000000..fdfb451 --- /dev/null +++ b/tests/tyex.c @@ -0,0 +1,12 @@ + typedef struct { + double x; + double y; + char *name; +} Location; + +int main () { + Location a; + Location *b; + foo (a.x,a.y,a.name); + foo (b->x,b->y,b->name); +} diff --git a/tests/tyex.cocci b/tests/tyex.cocci new file mode 100644 index 0000000..9477a8b --- /dev/null +++ b/tests/tyex.cocci @@ -0,0 +1,40 @@ +@@ +@@ + +typedef struct { + ... +- char *name; + ... +} +- Location ++ Point + ; ++ typedef struct { ++ char *name; ++ Point p; ++ } Location; + +@@ +typedef Location; +Location some_location; +identifier x; +@@ + +( + some_location.name +| +- some_location.x ++ some_location.p.x +) + +@@ +Location *some_location; +identifier x; +@@ + +( + some_location->name +| +- some_location->x ++ some_location->p.x +) diff --git a/tests/tyex.res b/tests/tyex.res new file mode 100644 index 0000000..e5b3928 --- /dev/null +++ b/tests/tyex.res @@ -0,0 +1,13 @@ + typedef struct { + double x; + double y; +} Point; +typedef struct {char *name; +Point p;}Location; + +int main () { + Location a; + Location *b; + foo (a.p.x,a.p.y,a.name); + foo (b->p.x,b->p.y,b->name); +} diff --git a/tools/Makefile b/tools/Makefile index ba98ec0..29d487d 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,3 +1,23 @@ +# Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix +# This file is part of Coccinelle. +# +# Coccinelle is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, according to version 2 of the License. +# +# Coccinelle is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Coccinelle. If not, see . +# +# The authors reserve the right to distribute this or future versions of +# Coccinelle under other licenses. + + -include ../Makefile.config PROGS=spp gitgrep split_patch extract_c_and_res #generate_dependencies diff --git a/tools/a.out b/tools/a.out deleted file mode 100755 index e4dae6f47029b7d5c3c7d8d36f2265be99ce4dbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68789 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 ce^bBKkNdJ%PU_dMs+@P>g%|#EPtS}0FJ#EQ!T. + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + (* The following finds out for each file, how it does deallocation for each allocator *) diff --git a/tools/bridge.ml b/tools/bridge.ml index 6e3037c..2afe5c2 100644 --- a/tools/bridge.ml +++ b/tools/bridge.ml @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + let drop_spaces s = String.concat "" (Str.split (Str.regexp "[ ]+") s) diff --git a/tools/dir_stats.ml b/tools/dir_stats.ml index a4f1417..b147fae 100644 --- a/tools/dir_stats.ml +++ b/tools/dir_stats.ml @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + (* for each marked thing, how often does it occur and in what files and directories *) diff --git a/tools/extract_c_and_res.ml b/tools/extract_c_and_res.ml index 1eb3804..7a3ad57 100644 --- a/tools/extract_c_and_res.ml +++ b/tools/extract_c_and_res.ml @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + open Common (*****************************************************************************) diff --git a/tools/generate_dependencies.ml b/tools/generate_dependencies.ml index 4cf056c..bcf47d2 100644 --- a/tools/generate_dependencies.ml +++ b/tools/generate_dependencies.ml @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + open Common (*****************************************************************************) diff --git a/tools/gitgrep.ml b/tools/gitgrep.ml index 0c9c59a..aba1914 100644 --- a/tools/gitgrep.ml +++ b/tools/gitgrep.ml @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + (* adjust as convenient *) let prefix = "/tmp/" let prefix = "" diff --git a/tools/gitsort.ml b/tools/gitsort.ml index 4b7e256..29c4833 100644 --- a/tools/gitsort.ml +++ b/tools/gitsort.ml @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + (* sort a list of git codes such that the most recent comes first *) let git_home = ref "/home/julia/linux-2.6" diff --git a/tools/licensify.ml b/tools/licensify.ml index 0482f07..91f59f1 100644 --- a/tools/licensify.ml +++ b/tools/licensify.ml @@ -1,6 +1,28 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + let lines = ["Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen"; -"Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller"; +"Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix"; "This file is part of Coccinelle."; ""; "Coccinelle is free software: you can redistribute it and/or modify"; @@ -19,17 +41,25 @@ let lines = "Coccinelle under other licenses." ] -let c_lines = "/*" :: (List.map (function x -> "* "^x) lines) @ ["*/"] -let ml_lines = "(*" :: (List.map (function x -> "* "^x) lines) @ ["*)"] +let comment_lines = + List.map (function x -> if x <> "" then " * "^x else " *") lines + +let cpp_lines = "/*" :: comment_lines @ [" */"] -let make_lines = (List.map (function x -> "# "^x) lines) +let ml_lines = "(*" :: comment_lines @ [" *)"] + +let make_lines = (List.map (function x -> if x <> "" then "# "^x else "#") lines) +let c_lines = (List.map (function x -> if x <> "" then "// "^x else "//") lines) let do_one file = let lines = - if Filename.check_suffix file ".mly" then c_lines else - if Filename.check_suffix file ".ml" then ml_lines else - if Filename.check_suffix file ".mll" then ml_lines else + if Filename.check_suffix file ".cocci" then c_lines else + if Filename.check_suffix file ".mly" then cpp_lines else + if Filename.check_suffix file ".ml" then ml_lines else + if Filename.check_suffix file ".mli" then ml_lines else + if Filename.check_suffix file ".mll" then ml_lines else + if Filename.check_suffix file ".pl" then make_lines else if Filename.basename file = "Makefile" then make_lines else failwith (Printf.sprintf "unknown file type: %s" file) in let _ = Sys.command (Printf.sprintf "cp %s /tmp/tmpfl" file) in @@ -43,14 +73,14 @@ let do_one file = (* pad's modif *) let (+>) o f = f o -let cat file = +let cat file = let chan = open_in file in - let rec cat_aux acc () = + let rec cat_aux acc () = (* cant do input_line chan::aux() cos ocaml eval from right to left ! *) let (b, l) = try (true, input_line chan) with End_of_file -> (false, "") in - if b + if b then cat_aux (l::acc) () - else acc + else acc in cat_aux [] () +> List.rev +> (fun x -> close_in chan; x) @@ -61,20 +91,24 @@ let rec process dir = List.map (function fl -> dir^"/"^fl) (Array.to_list(Sys.readdir dir)) with Sys_error _ -> [] in - List.iter (function file -> - try - let xs = cat file in - if List.exists (fun s -> + List.iter (function file -> + try + let xs = cat file in + if List.exists (fun s -> s = "* This file is part of Coccinelle." - || + || s = "# This file is part of Coccinelle." - ) xs + || + s = "// This file is part of Coccinelle." + || + Str.string_match (Str.regexp_string "Copyright") s 0 + ) xs then print_string ("already processed: " ^ file ^ "\n") else begin do_one file; print_string ("processed: " ^ file ^ "\n"); end - with _ -> + with _ -> print_string ("skipped: " ^ file ^ "\n"); () ) files; diff --git a/tools/process_isoprofile.ml b/tools/process_isoprofile.ml index 29027db..9a27a83 100644 --- a/tools/process_isoprofile.ml +++ b/tools/process_isoprofile.ml @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + (* This is for processing information created with the -profile_iso option. Runs are assumed separated with a line beginning with =. The first run is discarded *) diff --git a/tools/split_patch.ml b/tools/split_patch.ml index 059ba55..f6e0f73 100644 --- a/tools/split_patch.ml +++ b/tools/split_patch.ml @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + open Common module CP = Classic_patch diff --git a/tools/spp.ml b/tools/spp.ml index 1281fba..471a7e9 100644 --- a/tools/spp.ml +++ b/tools/spp.ml @@ -1,3 +1,25 @@ +(* + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + open Common exception WrongArguments -- 2.20.1